#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=;
ve.clear();
m=n;
n=n*(n-)/;
for(i=; i<n; i++)
{
scanf("%d-%d",&x,&y);
if(flag)
{
if(x==y)
{
flag=;
}
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=;
sort(ve.begin(),ve.end(),cmp);
for(i=; i<m; i++)
{
if(flag)
for(j=i+; j<=m; j++)
{
if(i!=ve[k].x||j!=ve[k].y)
{
flag=;
break;
}
k++;
}
else break;
}
}
if(flag)printf("Yes\n");
else printf("No\n");
}
return ;
}
#include<iostream>
#include<string.h>
#include<cstdio> using namespace std;
int flag[][];
int main()
{ int i,j;
int n,a,b; char str[]; while(scanf("%d",&n)!=EOF)
{ memset(flag,,sizeof(flag));
int tag=; for(i=;i<n;i++)
{
for(j=;j<=n/;j++)
{
cin>>str;
sscanf(str,"%d-%d",&a,&b);
if(flag[a][b]==||flag[b][a]==||a==b)
{
tag=;
}
flag[a][]++;
flag[b][]++;
flag[a][b]=;
flag[b][a]=;
}
}
if(tag)
printf("No\n");
else
{
int tag1=;
for(i=;i<=n;i++)
{
if(flag[i][]!=n-)
{
tag1=;
printf("No\n");
break;
}
}
if(!tag1)
printf("Yes\n");
}
}
return ;
}

都WA了,疑惑不解啊!!!

题意问题!!!!!!!??

正确理解方式:

  每一行的输入是每只队伍比赛且仅比赛一次;

  所有输入的组合是赛事安排的所有可选解

正解:

#include<stdio.h>
#include<string.h>
int flag[][];
int hang[];
int main()
{ int i,j;
int n,a,b; char str[]; while(scanf("%d",&n)!=EOF)
{ memset(flag,,sizeof(flag));
int tag=; for(i=;i<n;i++)
{
memset(hang,,sizeof(hang));
for(j=;j<=n/;j++)
{
//cin>>str;
scanf("%d-%d",&a,&b);
if(flag[a][b]==||flag[b][a]==||a==b)
{
tag=;
}
hang[a]++;
hang[b]++;
flag[a][]++;
flag[b][]++;
flag[a][b]=;
flag[b][a]=;
}
for(j=;j<=n;j++)
{
if(hang[j]!=)
{
tag=;
break;
}
}
}
if(tag)
printf("No\n");
else
{
int tag1=;
for(i=;i<=n;i++)
{
if(flag[i][]!=n-)
{
tag1=;
printf("No\n");
break;
}
}
if(!tag1)
printf("Yes\n");
}
}
return ;
}
#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\n");
else printf("No\n");
}
return 0;
}
05-11 13:15