#include<stdio.h> #include<vector> #include<algorithm> using namespace std; struct Node { int x,y; } p; bool cmp(Node a,Node b) { if(a.x<b.x)return true; if(a.x==b.x&&a.y<b.y)return true; return false; } vector<Node>ve; int main() { int n,m; int x,y,flag; int i,j; while(scanf("%d",&n)!=EOF) { flag=1; ve.clear(); m=n; n=n*(n-1)/2; for(i=0; i<n; i++) { scanf("%d-%d",&x,&y); if(flag) { if(x==y) { flag=0; } else if(x>y) { p.x=y; p.y=x; ve.push_back(p); } else { p.x=x; p.y=y; ve.push_back(p); } } } if(flag) { int k=0; sort(ve.begin(),ve.end(),cmp); for(i=1; i<m; i++) { if(flag) for(j=i+1; j<=m; j++) { if(i!=ve[k].x||j!=ve[k].y) { flag=0; break; } k++; } else break; } } if(flag)printf("Yes "); else printf("No "); } return 0; }
#include<iostream> #include<string.h> #include<cstdio> using namespace std; int flag[2010][2010]; int main() { int i,j; int n,a,b; char str[20]; while(scanf("%d",&n)!=EOF) { memset(flag,0,sizeof(flag)); int tag=0; for(i=1;i<n;i++) { for(j=1;j<=n/2;j++) { cin>>str; sscanf(str,"%d-%d",&a,&b); if(flag[a][b]==1||flag[b][a]==1||a==b) { tag=1; } flag[a][0]++; flag[b][0]++; flag[a][b]=1; flag[b][a]=1; } } if(tag) printf("No "); else { int tag1=0; for(i=1;i<=n;i++) { if(flag[i][0]!=n-1) { tag1=1; printf("No "); break; } } if(!tag1) printf("Yes "); } } return 0; }
都WA了,疑惑不解啊!!!
题意问题!!!!!!!??
正确理解方式:
每一行的输入是每只队伍比赛且仅比赛一次;
所有输入的组合是赛事安排的所有可选解
正解:
#include<stdio.h> #include<string.h> int flag[2010][2010]; int hang[2010]; int main() { int i,j; int n,a,b; char str[20]; while(scanf("%d",&n)!=EOF) { memset(flag,0,sizeof(flag)); int tag=0; for(i=1;i<n;i++) { memset(hang,0,sizeof(hang)); for(j=1;j<=n/2;j++) { //cin>>str; scanf("%d-%d",&a,&b); if(flag[a][b]==1||flag[b][a]==1||a==b) { tag=1; } hang[a]++; hang[b]++; flag[a][0]++; flag[b][0]++; flag[a][b]=1; flag[b][a]=1; } for(j=1;j<=n;j++) { if(hang[j]!=1) { tag=1; break; } } } if(tag) printf("No "); else { int tag1=0; for(i=1;i<=n;i++) { if(flag[i][0]!=n-1) { tag1=1; printf("No "); break; } } if(!tag1) printf("Yes "); } } return 0; }
#include<stdio.h> #include<string.h> #include<vector> #include<algorithm> using namespace std; struct Node { int x,y; } p; bool cmp(Node a,Node b) { if(a.x<b.x)return true; if(a.x==b.x&&a.y<b.y)return true; return false; } vector<Node>ve; int hang[2010]; int main() { int n; int x,y,flag; int i,j; while(scanf("%d",&n)!=EOF) { flag=1; ve.clear(); for(i=1; i<n; i++) { memset(hang,0,sizeof(hang)); for(j=1; j<=n/2; j++) { scanf("%d-%d",&x,&y); hang[x]++; hang[y]++; if(flag) { if(x==y) { flag=0; } else if(x>y) { p.x=y; p.y=x; ve.push_back(p); } else { p.x=x; p.y=y; ve.push_back(p); } } } for(j=1;j<=n/2;j++) { if(hang[j]!=1) { flag=0; break; } } } if(flag) { int k=0; sort(ve.begin(),ve.end(),cmp); for(i=1; i<n; i++) { if(flag) for(j=i+1; j<=n; j++) { if(i!=ve[k].x||j!=ve[k].y) { flag=0; break; } k++; } else break; } } if(flag)printf("Yes "); else printf("No "); } return 0; }