`
暴风雪
  • 浏览: 390601 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

[usaco] Chapter2-Bigger Challenges(Section 2.1)

阅读更多

 

/*
    ID:123ldss2
    PROG: castle
    LANG: C++
*/
#include<cstring>
#include<fstream>
#include<cstdio>
using namespace std;
const int nMax=100005;
int father[nMax],rank[nMax],N,M,num[nMax],sum;   //rank近似树的高度。

ifstream fin("castle.in");
ofstream fout("castle.out");
int find(int x){ // 寻找父节点
    if(x!=father[x])
        return father[x]=find(father[x]);
    return x;
}

void unite(int a,int b){
 //   cout<<a<<" unio "<<b<<endl;
    int x=find(a);
    int y=find(b);
    if(x==y)
        return ;
    else{
        if(rank[x]>rank[y]){
            father[y]=x;
            num[x]+=num[y];
        }
        else if(rank[x]<rank[y]){
            father[x]=y;
            num[y]+=num[x];
        }
        else{
            father[x]=y;
            num[y]+=num[x];
            rank[y]++;
        }
    }
}

void set(){    // 初始化
    int i;
    for(i=0; i<nMax-1; i++){
        father[i]=i;
        rank[i]=0;
        num[i]=1;
    }
    //n=0;
}

int map[100][100];
bool vis[nMax];

int main(){
    int n,m,i,j,ans1,a,b;
//    freopen ( "castle.in", "r", stdin );
//    freopen ( "castle.out", "w", stdout );
    while(fin>>m>>n){//scanf("%d%d",&m,&n)!=EOF
        set();
        sum=0;
        memset(vis,0,sizeof(vis));
        for(i=1;i<=n;i++){
            for(j=1;j<=m;j++){
                //scanf("%d",&map[i][j]);
                fin>>map[i][j];
                if((map[i][j]&1)==0){
                    unite((i-1)*m+j,(i-1)*m+j-1);
                }
                if((map[i][j]&2)==0){
                    unite((i-1)*m+j,(i-2)*m+j);
                }
                if((map[i][j]&4)==0){
                    unite((i-1)*m+j,(i-1)*m+j+1);
                }
                if((map[i][j]&8)==0){
                    unite((i-1)*m+j,(i)*m+j);
                }
            }
        }
        ans1=0;
        for(i=1;i<=n*m;i++){
            j=find(i);
           // cout<<"num"<<num[find(i)]<<endl;
            ans1=max(ans1,num[find(i)]);
            if(vis[j]==0){
                vis[j]=1;
                sum++;
            }
        }
        fout<<sum<<endl;
        fout<<ans1<<endl;
        int xxx,yyy;
        ans1=0;
        char cha;
        for(j=1;j<=m;j++)
        {
            for(i=n;i>=1;i--)
            {
                a=(i-1)*m+j;
                a=find(a);
                if(i!=1)
                {
                    b=(i-2)*m+j;
                    b=find(b);
                    if(a!=b&&ans1<num[a]+num[b])
                    {
                        ans1=num[a]+num[b];
                        xxx=j;
                        yyy=i;
                        cha='N';
                    }
                }
                if(j!=m)
                {
                    b=(i-1)*m+j+1;
                    b=find(b);
                    if(a!=b&&ans1<num[a]+num[b])
                    {
                        ans1=num[a]+num[b];
                        xxx=j;
                        yyy=i;
                        cha='E';
                    }
                }
            }
        }
        fout<<ans1<<endl;
        fout<<yyy<<" "<<xxx<<" "<<cha<<endl;
    }
    return 0;
}

  /*

    ID: bbezxcy1
    PROG: frac1
    LANG: C++
*/
#include<iostream>
#include<cstring>
#include<fstream>
#include<algorithm>
#include<cstdio>
using namespace std;

ifstream fin("frac1.in");
ofstream fout("frac1.out");
int  play(int a, int b){
    int c,d,e;
    d=a;e=b;
    do{c=a%b;a=b;b=c;}while(c!=0);
    return a;
}

class fuck
{
    public:
    int a,b;
}sum[1000000];

bool cmp(fuck x,fuck y)
{
    if(x.a*y.b>x.b*y.a)
    {
        return 0;
    }
    return 1;
}
int cnt;
int main()
{
    int n,m,i,k,j,a,b,c;
    while(fin>>n)
    {
        for(i=2;i<=n;i++)
        {
            for(j=1;j<i;j++)
            {
              //  cout<<j<<" "<<i<<" "<<play(i,j)<<endl;
                if(play(i,j)==1)
                {
                    sum[cnt].a=j;
                    sum[cnt++].b=i;
                }
            }
        }
        sort(sum,sum+cnt,cmp);
        fout<<"0/1\n";
        for(i=0;i<cnt;i++)
        {
            fout<<sum[i].a<<"/"<<sum[i].b<<endl;
        }
        fout<<"1/1\n";
    }
    return 0;
}

  /*

    ID:123ldss2
    PROG: sort3
    LANG: C++
*/
#include<iostream>
#include<cstring>
#include<cstdio>
#include<fstream>
#include<cmath>
using namespace std;
const int nMax=2000;
const int mMax=300000;
const int inf=1<<30;
ifstream fin("sort3.in");
ofstream fout("sort3.out");
int num[1003],check[1003],aaa[4],bbb[4],map[10][10];
int main(){
    int n,i,j,k,a,b,c;
    while(fin>>n)
    {
        memset(aaa,0,sizeof(aaa));
        memset(bbb,0,sizeof(bbb));
        memset(map,0,sizeof(map));
        for(i=1;i<=n;i++)
        {
            fin>>num[i];
            aaa[num[i]]++;
        }
        k=1;
        for(j=1;j<=3;j++)
        {
            for(i=1;i<=aaa[j];i++)
            {
                check[k++]=j;
            }
        }
        for(i=1;i<=n;i++)
        {
            if(num[i]!=check[i])
            {
                map[num[i]][check[i]]++;
            //    map[check[i]][num[i]]++;
                bbb[num[i]]++;
            }
        }
        int ans=0;
        b=0;

//        for(i=1;i<=3;i++)
//        {
//            for(j=1;j<=3;j++)
//            {
//                cout<<map[i][j]<<" ";
//            }cout<<endl;
//        }
        for(i=1;i<=3;i++)
        {
            for(j=1;j<=3;j++)
            {
                if(i==j)continue;
                if(map[i][j]&&map[j][i])
                {

                    a=min(map[i][j],map[j][i]);
                    ans+=a;
                    map[i][j]-=a;
                    map[j][i]-=a;
                }
                b+=map[i][j];
               // cout<<map[i][j]<<" ";
            }//cout<<endl;
        }
        ans+=(b/3*2);
        fout<<ans<<endl;
    }
    return 0;
}

  /*

ID: bbezxcy1
PROG: holstein
LANG: C++
*/
#include<iostream>
#include<cstring>
#include<fstream>
#include<cstdio>
using namespace std;
int need[2000],n,m,res[30],ans;
int madc[30][2000];
int have[1000];
int vis[30];
ifstream fin("holstein.in");
ofstream fout("holstein.out");
bool check(){
	for(int i=0;i<n;i++){
        if(have[i]<need[i]){
			return 0;
		}
	}
	return 1;
}
void dfs(int pos,int dep){
    int i,j;
	if(dep>=ans||pos>m){
		return;
	}
	if(check()){
	    if(dep<ans){
	    //    cout<<"dwad "<<dep;
			ans=dep;
			for(i=0;i<=m;i++){
			//    cout<<" "<<vis[i];
				res[i]=vis[i];
			}
		}
	}
    for(i=pos+1;i<=m;i++){
		vis[i]=1;
		for(j=0;j<n;j++){
			have[j]+=madc[i][j];
		}
	    dfs(i,dep+1);
		for(j=0;j<n;j++){
			have[j]-=madc[i][j];
		}
		vis[i]=0;
	}
}
int main(){
	int i,j;
   // freopen("namenum.in","r",stdin );
	while(fin>>n){
		ans=1<<30;
		for(i=0;i<n;i++){
			fin>>need[i];
		}
		fin>>m;
		for(i=1;i<=m;i++){
			for(j=0;j<n;j++){
				fin>>madc[i][j];
			}
		}
		memset(vis,0,sizeof(vis));
		memset(res,0,sizeof(res));
		memset(have,0,sizeof(have));
		dfs(0,0);
		fout<<ans;
		int b=0;
		for(i=0;i<=m;i++)
		{
		    if(res[i])
		    {
		        fout<<" "<<i;
//		        if(b)cout<<" ";
//		        cout<<i;
//		        b=1;
		    }
		}fout<<endl;
	}
	return 0;
}

  /*

    ID:bbezxcy1
    PROG: hamming
    LANG: C++
*/
#include<iostream>
#include<fstream>
#include<cstring>
#include<cstdio>
using namespace std;
int n,b,d;
int ans1[100];
int getdis(int a,int bs){
	int aaa[50],bbb[50];
	memset(aaa,0,sizeof(aaa));
	memset(bbb,0,sizeof(bbb));
	int ccc=0,ddd=0;
	while(a){
		aaa[ccc]=a%2;
		a/=2;
		ccc++;
	}
	while(bs){
		bbb[ddd]=bs%2;
		bs/=2;
		ddd++;
	}
	ddd=0;
	for(int i=0;i<b;i++){
		if(aaa[i]!=bbb[i]){
			ddd++;
		}
	}
	return ddd;
}
bool flag;
void dfs(int dep,int pre){
    int i;
    if(dep>=2){
		for(i=1;i<dep;i++){
			if(getdis(ans1[i],ans1[dep])<d){
				return;
			}
		}
	}
	if(dep==n){
		flag=0;
	}
	for(i=pre+1;i<1<<b;i++){
		ans1[dep+1]=i;
		dfs(dep+1,i);
		if(!flag){
			return;
		}
	}
}
ifstream fin("hamming.in");
ofstream fout("hamming.out");
int main(){
	int i,j,k,a,c;
//	while(cin>>a>>c>>b)
//	{
//	    cout<<getdis(a,c)<<endl;
//	}
	while(fin>>n>>b>>d){
		flag=1;
		dfs(0,-1);
		k=1;
		for(i=1;i<=n;i++){
		    k++;
		    if(k>10)
		    {
                fout<<ans1[i]<<endl;
                k=1;
		    }
		    else
		    {
		        if(i==n)
		        {
		            fout<<ans1[i]<<endl;
		        }
		        else{
		            fout<<ans1[i]<<" ";
		        }
		    }
		}
	}
	return 0;
}
 

 

 

 

 

 

 

 

0
1
分享到:
评论

相关推荐

    usaco chapter3-6

    usaco 3到6章讲解

    usaco历年数据---2001

    2. **算法设计**:USACO和ACM比赛强调高效的算法设计,通过解题可以学习到排序、搜索、图论、动态规划等多种算法。 3. **编程语言的应用**:比赛通常接受多种编程语言的解决方案,如C++、Java、Python等,学习如何...

    USACO section1-5测试数据

    这个压缩包文件包含的是USACO比赛section1到section5的测试数据和标准程序,这对于准备参加USACO竞赛或者想要提升自己编程技能的学生来说,是非常宝贵的资源。 section1至section5代表了USACO比赛的不同难度级别,...

    usaco历年试题---2002

    《USACO历年试题——2002》 USACO,全称为USA Computing Olympiad,是美国计算机奥林匹克竞赛,旨在提升中学生的算法设计和编程能力。2002年的USACO试题集,是这一赛事历史上的一个重要部分,对于学习算法、准备ACM...

    USACO1-5单元AC代码

    2 Chapter2 2.1 Section 2.1 2.2 Section 2.2 2.3 Section 2.3 2.4 Section 2.4 3 Chapter3 3.1 Section 3.1 3.2 Section 3.2 3.3 Section 3.3 3.4 Section 3.4 4 Chapter4 4.1 Section 4.1 4.2 Section 4.2 4.3 ...

    USACO-Bessie-Come-Home.zip_Home Home

    【标题】USACO-Bessie-Come-Home.zip_Home Home 【正文】 这个压缩包文件中的内容是关于USACO(美国计算机奥林匹克)竞赛中一个名为"Bessie Come Home"的问题的C++解决方案。USACO是一个针对高中生的在线编程竞赛...

    USACO2001-2007历年月赛测试数据+题目+题解打包全

    资源包包括USACO 2001-2007年月赛的测试数据;usaco月赛十年题典(2000-2009),usaco月赛2002-2008题解。单独下载需资源分30分以上。为了方便编程爱好者,我这边统一下载打包。欢迎下载。

    USACO-Magic-Squares.zip_magic

    《USACO魔法方阵:C++编程解析》 USACO(美国计算机奥林匹克)是一项旨在培养高中生计算机科学技能的竞赛。在这个问题中,我们关注的是“Magic Squares”,这是一个经典的数学概念,与C++编程相结合,构成了一个...

    usaco 源程序 section2.3---section 5.5

    USACO(美国计算机奥林匹克竞赛)是一场针对高中生的在线编程比赛,旨在提升参赛者在算法、数据结构和编程方面的技能。源程序是参赛者解决问题的关键,通过编写代码来实现特定的功能或解决数学和逻辑问题。这个...

    USACO-Greedy-Gift-Givers.rar_greedy gift givers

    USACO(USA Computing Olympiad)是一项面向美国高中生的在线编程竞赛,旨在培养参赛者的算法设计和编程技能。在"Greedy Gift Givers"这个题目中,我们面对的是一个贪心算法的应用问题。贪心算法是一种解决问题的...

    usaco 2010-2011

    2. **USACO 十一月竞赛** - 2010 年 11 月 5 日至 8 日 3. **COCI** - 2010 年 11 月 13 日 (http://www.hsin.hr/coci/) 4. **USACO 十二月竞赛** - 2010 年 12 月 3 日至 6 日 5. **COCI** - 2010 年 12 月 11 日 ...

    USACO2001-2007月赛全集

    这是USACO2001-2007月赛全集。 usaco是美国中学生的官方竞赛网站。是美国著名在线题库,专门为信息学竞赛选手准备。推荐直接阅读英语原文,既准确可靠又可提高英语水平。做题方式模拟正式比赛,采用标准测评机、文件...

    USACO-Training-Website:我的USACO培训网站解决方案

    这个名为"USACO-Training-Website:我的USACO培训网站解决方案"的压缩包文件,显然包含了作者对USACO训练网站上部分或所有章节的练习题目的解答。这些解答可能以源代码的形式存在,每个文件顶部可能带有详细的USACO...

    USACO-Training-Pages:美国计算机奥林匹克训练页

    在这个“USACO-Training-Pages”压缩包中,我们可以期待找到与USACO竞赛相关的各种资料,尤其是针对Java语言的学习材料。Java作为一种广泛应用于计算机科学领域的面向对象的编程语言,因其强大的跨平台能力和简洁的...

    USACO-Chapter2.rar_beginners

    "USACO-Chapter2.rar_beginners" 是针对USACO第二章内容的压缩包,特别适合编程新手入门。 在USACO的第二章,主要涉及基础的算法和数据结构,这对于构建扎实的编程基础至关重要。让我们逐一解析这个压缩包中的四个...

    usaco-java-gold

    在这个“usaco-java-gold”主题中,我们将深入探讨Java在USACO黄金级别比赛中的应用,以及如何解决相关问题。 一、Java语言基础 1. 类与对象:Java是一种面向对象的语言,理解和熟练运用类和对象是解决USACO问题的...

    Notes-USACO-2021-弹簧

    本压缩包“Notes-USACO-2021-Spring”中的笔记主要聚焦于2021年春季训练营和比赛的知识点,对于想要深入学习算法和提升编程能力的爱好者来说,具有极高的学习价值。 笔记内容可能包括但不限于以下几个方面: 1. **...

    USACO题解+程序

    我的USACO题解和程序

    USACO-Chapter1.rar_it_usaco

    《USACO入门指南——第一章解析》 USACO,全称USA Computing Olympiad,是美国计算机奥林匹克竞赛,旨在培养中学生在算法和编程方面的技能。对于初学者来说,USACO提供了很好的学习路径和挑战。本文将针对USACO的第...

    USACO Results Analytics-crx插件

    分析USACO比赛结果。 根据数据绘制一些图表。 此扩展程序从USACO竞赛结果页面收集数据,并构建漂亮的图形以更好地了解参与者,国家和分数。 使用d3.js和nvd3.js库进行绘制。 使用方法:只需进入USACO竞赛结果页面,...

Global site tag (gtag.js) - Google Analytics