A
传送门
给出一个80位的二进制字符串,然后给出10个10位的二进制字符串,然后每10位属于一个密码值,在下面10个二进制字符串中找到匹配的字符串,用下标组成密码
我把每个10位的二进制字符串转化为一个十进制,然后利用十进制去搜索
(字符串hash思想)
#include <iostream>
#include <cstdio>
using namespace std;
int num[20];
char s[85];
int change(char a[]){
int ans=0;
int base=1;
for(int i=10;i>=1;i--){
ans+=base*(a[i]-'0');
base*=2;
}
return ans;
}
void check(){
for(int i=1;i<=8;i++){
int ans=0;
int base=1;
for(int j=10*i;j>=1+(i-1)*10;j--){
ans+=base*(s[j]-'0');
base*=2;
}
for(int k=0;k<10;k++){
if(ans==num[k]){
printf("%d",k);
break;
}
}
}
}
int main(){
char a[80];
scanf("%s",s+1);
for(int i=0;i<10;i++){
scanf("%s",a+1);
num[i]=change(a);
}
check();
cout<<endl;
return 0;
}
B
传送门
没懂没懂
和欧拉回路,哈密顿回路不同,它限制了只能是3对熟人或者3对不熟人,也就是说每个点只能是有两个边与它相连才行
#include <iostream>
#include <cstdio>
using namespace std;
int x[10];
int main(){
int m;
cin>>m;
for(int i=1;i<=m;i++){
int a,b;
scanf("%d%d",&a,&b);
x[a]++;x[b]++;
}
int flag=1;
for(int i=1;i<=5;i++){
if(x[i]!=2){
flag=0;
break;
}
}
printf("%s\n",flag==1?"FAIL":"WIN");
return 0;
}