社区讨论
求助为什么45
P10467[CCC 2007] Snowflake Snow Snowflakes参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @m664fr5g
- 此快照首次捕获于
- 2025/01/21 14:55 去年
- 此快照最后确认于
- 2025/11/04 11:08 4 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
int cnt,s[100005],n,snow[100005][10],head[100005];
struct edge{
int to,next;
}e[100005];
void add(int val,int i){
e[++cnt].to=i;
e[cnt].next=head[val];
head[val]=cnt;
}
int cmp(int a,int b){
int i,j;
for(int i=0;i<6;i++){
if(snow[a][0]==snow[b][i]){
for(int j=1;j<6;j++){
if(snow[a][j]!=snow[b][(i+j)%6]){
break;
}
}
if(j==6){
return 1;
}
for(int j=1;j<6;j++){
if(snow[a][6-j]!=snow[b][(i+j)%6]){
break;
}
}
if(j==6){
return 1;
}
}
}
return 0;
}
bool find(int i,int sum){
int key;
key=sum%n;
for(int j=head[key];j;j=e[j].next){
if(cmp(i,e[j].to)){
return 1;
}
}
add(key,i);
return 0;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=0;j<6;j++){
cin>>snow[i][j];
s[i]+=snow[i][j];
}
}
for(int i=1;i<=n;i++){
if(find(i,s[i])){
cout<<"Twin snowflakes found.";
return 0;
}
}
cout<<"No two snowflakes are alike.";
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...