下面的代码 郁闷死了,全部测试用例都对,能想到的用例也对,就是WA,
#include<stdio.h>
#include<string.h>
void main()
{
char a[10000][8];
int s[10001],mark[10000];
int n,l,m,i,j,k=0;
int left_t=0,right_t=0;
scanf("%d",&n);
for(i=0;i<n;i++)
{
left_t=0;right_t=0;
scanf("%d %d",&l,&m);
for(j=0;j<m;j++)
{
scanf("%d %s",&s[j],a[j]);
mark[j]=0;
}
for(j=0;j<m-1;j++)
{
if(mark[j]==1) continue;
for(k=j+1;k<m;k++)
{
if(mark[j]==0&&mark[k]==0&&(!strcmp(a[j],a[k]))&&s[j]+s[k]<=l*100)
{
s[j]=s[j]+s[k];
mark[k]=1;
}
}
}
// for(j=0;j<m;j++)
// printf("%d !!%s!! %d/n",s[j],a[j],mark[j]);
for(j=0;j<m;j++)
{
if(a[j][0]=='l'&&mark[j]==0) left_t++;
if(a[j][0]=='r'&&mark[j]==0) right_t++;
}
if(left_t>right_t)
printf("%d/n",2*left_t-1);
else
printf("%d/n",2*right_t);
}
}
题目:http://acm.pku.edu.cn/JudgeOnline/problem?id=3282
不过下面的一次就ac了
#include<stdio.h>
#include<string.h>
void main()
{
int l,m,n,i,j,sum,k,h=0,left_t=0,right_t=0;
char a[]="left",s[8];
int left[100000],right[100000];
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d%d",&l,&m);
l=l*100;
k=0;h=0;
left_t=0;right_t=0;
for(j=0;j<m;j++)
{
scanf("%d %s",&sum,s);
//printf("|||||%d %s|||/n",sum,s);
if(strcmp(s,a)==0) left[k++]=sum;
else right[h++]=sum;
}
left_t=k;
right_t=h;
// printf("l=%d left_t=%d %d/n",l,left_t,right_t);
sum=0;
for(j=0;j<k;j++)
{
if(left[j]+sum<=l)
{
sum=left[j]+sum;
if(j!=0) left_t--;
}
else
sum=left[j];
}
sum=0;
for(j=0;j<h;j++)
{
if(right[j]+sum<=l)
{
sum=sum+right[j];
if(j!=0) right_t--;
}
else
sum=right[j];
}
// printf("left_t =%d %d",left_t,right_t);
if(left_t>right_t)
printf("%d/n",2*left_t-1);
else
printf("%d/n",2*right_t);
}
}
但是现在还是不知道怎么回事,那位大哥帮我看一下啊