1 条题解
-
0
C :
#include<stdio.h> #include<stdlib.h> #include<string.h> int main() { int n,i,j,k; int sum[1010],c[1010]; //记录是否获胜 char a[1010][100],b[1010][100]; //记录每队选手的名字 while(scanf("%d%*c",&n),n) { memset(sum,0,sizeof(sum)); //初始化使sum=0,表失败 for(i=0;i<n;i++) { scanf("%s%s",&a[i],&b[i]); sum[i]=1; //表示前面a[i]获胜,b[i]失败 } for(i=0;i<n;i++) //比较看在b[i]中是否存在与a[i]相同的,存在就不是胜利者 { for(j=0;j<n;j++) { if(strcmp(a[i],b[j])==0) sum[i]=0; } } for(k=0,i=0;i<n;i++) //将全部没出现在失败者里的获胜者 的编号存放在c[]数组里,然后再比较 { if(sum[i]==1) c[k++]=i; } int flag=0; for(i=1;i<k;i++) { if(strcmp(a[c[i]],a[c[i-1]])==0) flag++; //比较看是否只有一个人在真的获胜者之中 } if(flag==k-1) printf("Yes\n"); else printf("No\n"); } return 0; }
C++ :
#include<cstdio> #include<string> #include<cstring> #include<map> using namespace std; int pre[1005]; map<string,int> st; map<int,string> ct; int main() { int n,cnt,flag; string a,b; char cha[105],chb[105]; for(;scanf("%d",&n),n;) { flag=0; memset(pre,0,sizeof(pre)); cnt=0; st.clear(); ct.clear(); for(int i=0;i<n;++i) { scanf("%s%s",cha,chb); a=string(cha); b=string(chb); if(st.count(a)==0) { st.insert(make_pair(a,cnt)); ct.insert(make_pair(cnt++,a)); } if(st.count(b)==0) { st.insert(make_pair(b,cnt)); ct.insert(make_pair(cnt++,b)); } pre[st.find(b)->second]++; } for(int i=0;i<cnt;++i) if(pre[i]==0) flag++; if(flag==1) puts("Yes"); else puts("No"); } return 0; }
- 1
信息
- ID
- 931
- 时间
- 1000ms
- 内存
- 32MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者