首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

南阳市理工OJ 130 相同的雪花

2013-04-26 
南阳理工OJ 130相同的雪花/*一个雪花是一个结构体,输入一个雪花先预处理一下就是找出雪花的最小序列,再用s

南阳理工OJ 130 相同的雪花

/*一个雪花是一个结构体,输入一个雪花先预处理一下就是找出雪花的最小序列,再用sort函数对雪花排序(利用运算符重载可以给结构体排序)然后再找有没有重复的雪花*/#include<cstdio>#include<algorithm>using namespace std;struct node{int a[6];}xue[100010],term,term1,term2;bool operator < (const node &x,const node &y){for(int i=0;i<5;i++)if(x.a[i]!=y.a[i])return x.a[i]<y.a[i];return x.a[5]<y.a[5];}bool operator == (const node &x,const node &y){return((x.a[0]==y.a[0])&&(x.a[1]==y.a[1])&&(x.a[2]==y.a[2])&&(x.a[3]==y.a[3])&&(x.a[4]==y.a[4])&&(x.a[5]==y.a[5]));}int main(){int T,n,i,j,f,min,k;scanf("%d",&T);while(T--){scanf("%d",&n);for(i=0;i<n;i++){for(j=0;j<6;j++)scanf("%d",&term.a[j]);//输入一片雪花xue[i]=term;for(j=0,min=(1<<31)-1;j<6;j++)if(term.a[j]<min)min=term.a[j];//找出最小的一枝for(j=0;j<6;j++)if(term.a[j]==min)//找出最小的序列{for(k=0;k<6;k++)term1.a[k]=term.a[(j+k)%6];//顺时针if(term1<xue[i])xue[i]=term1;for(k=0;k<6;k++)term2.a[k]=term.a[(j-k+6)%6];//逆时针if(term2<xue[i])xue[i]=term2;}}sort(xue,xue+n);//排序for(f=0,i=1;i<n;i++){if(xue[i]==xue[i-1])//有一样就的跳出{f=1;break;}}if(f)printf("Twin snowflakes found.\n");//输出else printf("No two snowflakes are alike.\n");}return 0;}

?

热点排行