杭电2094题 运行对了可是就是WA,simulate求解不运行

杭电OJ1007,WA了,求帮忙找出问题在哪,_百度知道
杭电OJ1007,WA了,求帮忙找出问题在哪,
cmp1),N.y-N? M;
for(i=0.h&}save[100010].h&gt?x;
qsort(save.y==N,N;%;; }}int main(){ int N; N=*(struct P*)Y.h&gt,double y){ return (x-y)& for(i=0; M=*(struct P*)X.y-save[i+1].x .x-N.h&double MIN(double x:y? M:M,N.
printf(&quot,&save[i];}int cmp1(const void *X,N,const void *Y){ struct P M;%d&quot.x)+(save[i];2);%lf%lf&}int cmp2(const void *X,&save[i].x==N,cmp2);stdlib,min);#include&
if(N==0) return M.x-save[i+1].y ,&N);n&i&lt.x.y;i++) {
min=MIN(sqrt((save[i].y);
find(N).y-N,y; } return 0;=0.x.x-N.y)*(save[i];
min=;.x :M;#include&lt.y-save[i+1],i;i++)
scanf(&n-1;math,j;;
scanf(& while(1) {
memset(save.y)),min&#47,0; #include&lt.x)*(save[i],sizeof(save[0]);}int find(int n){ int i.2lf&#92,sizeof(save[0]); N=*(struct P*)Y;struct P{
M=*(struct P*)X.1;
find(N);N.x-save[i+1],const void *Y){ struct P M,sizeof(save)); return M#include&lt
提问者采纳
12&nbsp输入40&2输出1;01&100100&nbsp
提问者评价
来自团队:
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁士兵队列训练问题------杭电HDOJ 1276(考虑全面就好了),有需要的朋友可以参考下。Problem Description某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行一至三报数,凡报到三的出列,剩下的向小序号方向靠拢,继续从头开始进行一至二报数。。。,以后从头开始轮流进行一至二报数、一至三报数直到剩下的人数不超过三人为止。Input本题有多个测试数据组,第一行为组数N,接着为N行新兵人数,新兵人数不超过5000。Output共有N行,分别对应输入的新兵人数,每行输出剩下的新兵最初的编号,编号之间有一个空格。Sample Input22040Sample Output1 7 191 19 37刚开始看这道题的时候分类是在枚举里面的,想想应该挺水的吧,吧,吧,吧。。。。。。后来WA了一次之后就发现考虑全面就很简单了!讲一下思路,仅供参考:刚开始定义一个数组liu[5006],咱们从1开始操作,这样下标就是新兵蛋子的编号然后在一个while(1)里面,有两个for,第一个for是用来出列2的,第二个for是用来出列3的,注意每个for后面都要判断剩余人数是不是小于3,是的话就break;这也是为什么while(1)的原因;然后讲一下注意事项:新兵蛋子可能小于三个,就是这里WA了一次!!!!!!所以开头要判断!!!!!!输出最后一个不能有空格,不能有空格!!!!!!不然PE!!!!!!讲完!!!!!!下面贴下AC代码:#include&stdio.h&#include&string.h&#include&math.h&#include&iostream&int main(){
int i,j,k;
int t,n,m;
int liu[5006];
//新兵蛋子一共不超过5000人;
scanf(&%d&,&t);
while(t--)
{memset(liu,0,sizeof(liu));
//初始化为0,代表未出列,同时下标为序列号;scanf(&%d&,&m); if(m&=3)
//新兵蛋子是可以少于三个的!!!!!!{k=0;for(i=1;i&=m;i++){
k++; //注意下输出的格式,空格问题!!!!!!
if(k!=m)printf(&%d &,i);
elseprintf(&%d&,i);}printf(&/n&);}sum=0;n=m;while(1){sum=0;for(i=1;i&=m;i++){
if(!liu[i])sum++;
if(sum==2)
{n--;liu[i]=1;sum=0;
}}if(n&=3)sum=0;for(i=1;i&=m;i++){
if(!liu[i])sum++;
if(sum==3)
{n--;liu[i]=1;sum=0;
}}if(n&=3)}/*for(i=1;i&=m;i++)printf(&%d &,liu[i]);printf(&/n&);*/k=0;for(i=1;i&=m;i++){if(!liu[i]){
//注意下输出的格式,空格问题!!!!!!
if(k!=n)printf(&%d &,i);
elseprintf(&%d&,i);}}printf(&/n&);
return 0;}写代码能力有限,如有神牛发现BUG,还请指出,不胜感激!杭电 acm 2094 产生冠军 帮忙看看哪里错了啊 ??_百度知道
杭电 acm 2094 产生冠军 帮忙看看哪里错了啊 ??
32768&#47,B又打败了C,每群选手都以一个整数n(n&lt,无需循环较量,确定是否已经实际上产生了冠军,每两个人之间最多打一场比赛,比赛结果以一对选手名字(中间隔一空格)表示。你的任务就是面对一群比赛选手;32768 K (Java/Others)Total Submission(s),或许就能确定冠军产生冠军Time Limit,打乒乓球比赛。根据这个规则: 4006
Accepted Submission(s),而A与C之间没有进行过比赛。如果n为0;Others)
Memory Limit、B: 1000&#47,则表示输入结束。如果A打败了B。Output对于每个选手群,那么就认定,两两捉对撕杀,那么A;1000 MS (Java&#47,在经过了若干场撕杀之后,B又打败了C: 1959Problem Description有一群人,则在一行中输出“Yes”,A一定能打败C,而且,后跟n对选手的比赛结果;1000)开头,若你判断出产生了冠军,C又打败了A、C三者都不可能成为冠军:如果A打败了B,前者战胜后者,否则在一行中输出“No”。球赛的规则如下。Input输入含有一些选手群
return 0;&n, char* argv[]){
break!=n&&((js1+js2/&struct shengbai{ char sheng[20]. char bai[20];n!strcmp(s[j];No&&}s[2001];&j++)
for(i=0;n;i++)
if(;&quot.bai.sheng,n) {
n;&lt.sheng&i&}
if(js2==1||(js1; int main(int argc.bai))
js1++;int js1=0;& while(cin&endl,i;&&lt,s[i];s[i];
for(i=0;i&lt,js2=0;s[i];
for(i=0;2)==n)))
cout&lt.sheng))
js2++,s[i];&
for(j=0;j&lt!strcmp(s[j];i&Yes&quot#include&iostream&gt
提问者采纳
x); } return sum==c;
while(n--)
p[i][j]=c;/ q[0]=s; } strcpy(s[c].h& for(i=0; char sa[MAX];i++)
if(p[s][i])
if(f[i])continue,sb),&n); memset(f;}int BFS(int s){ int q[MAX],x)==0) int fr=-1;int find(char x[]){ const int MAX=2005;本题是判断是不是有唯一的点到其他的点都有路;
i=find(sa);
q[r]=i;}int main(){ int n。#include&lt,
s=q[fr];}int findfather(int x){ if(x==f[x])
if(j==1)puts(&
else puts(& return (f[x]=findfather(f[x])); f[s]=c;bool f[MAX];
f[i]=i&i++) {
if(strcmp(s[i];i&
memset(p!=EOF&&n&c; c++,sizeof(p)).h&i++) {
sum+=f[i]!=r) {
for(i=0;%d&,sum=0;#include&No&char s[MAX][MAX];
int j=0,i&;i++)
j+=BFS(i);bool p[MAX][MAX];0) {
c=0,sizeof(f)); while(int c=0;%s%s&
j=find(sb),i;c; return i,j,i,r=0;
for(i=0,false,sb[MAX];i&lt/ while(scanf(&
} } for(i=0;); } return 0;
r++;Yes&quot
看看上边的代码啊,给的几组数据是对的,提交就是错,哪里出问题了啊???
我提交对的啊2-03-07 11:00:45 Accepted 2094 78MS
B C++ 我对你AAA不完你是用什么提交的啊?是什么错误啊?
不是你的代码错误,是上面我写的代码提交错误,不知道哪里错了。。
你的代码在哪里啊?我看不到你的代码啊你开1000太少了,题目中说对数是1000,人的话就可能有两千了
额,晕了,忘了贴了,,刚贴上了。。
12 1这个数据你不对
恩,改了一下这个数据能对了,可还是提交不了,还有哪里错了啊??
你改了代码呢?那个数组太开太小改了吗?不要改一个错误就提交。
数组不小啊,就是成对的人数,,改了也没过啊。。哪里还有错误??????
把你新的代码发出来看看
还在不??上边的问题补充就是 新的代码的
你的思路是什么,你的代码没有体现你的思路啊,你是不是想当然啊?没有用理智去分析?你的思路根本就没有理论依据,BUG很多4 1 2 2 3 5 6 6 5这个数据你又不对。你应该像我一样,分析出来一个思路,知道吗?你看我上面一分析,代码一写就马上AC了
提问者评价
恩,谢谢,教导的是啊。。。。。。。。。。。。
来自团队:
其他类似问题
为您推荐:
acm的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁杭电acm 4608 WA 求大神指点哪里错了(简单题,代码有注释)_百度知道
杭电acm 4608 WA 求大神指点哪里错了(简单题,代码有注释)
能想到的情况都是对的,但是还是WA。个人认为注释够明确了,看不懂的请绕,看不出问题来贴AC代码的请绕,只求真大神,谢谢。#include&cstdio&#include&cstring&int main(){
char a[111111],i,j,n,sum,len,
scanf(&%d&,&n);
while(n--)
memset(a,0,sizeof(a));
scanf(&%s&,a);
len=strlen(a);
for(i=0; i& i++)
sum+=a[i]-'0';
mod=sum%10;
if(mod&a[i]-'0')
//不用进位的情况
//进位的情况,思路:从后往前找到第一个不是9的数,那么让这个数加1,中间的数全变0,再改变最后一个数就能得到所求的数。
for(i=len-2; i&=0; i--)
if(a[i]!='9')
if(i!=-1)//有可以进位的数
for(j=i+1; j& j++)
sum-=(a[j]-'0');
a[j]='0';
if(sum%10)
a[len-1]='0&#3订储斥肥俪堵筹瑟船鸡9;+10-sum%10;
else//没有可以进位的数
a[0]='1';
for(i=1; i& i++)
a[i]='0';
a[len++]='9';
a[len]='\0';
printf(&%s\n&,a);
return 0;}
提问者采纳
不多说,也不直接说你哪里有订储斥肥俪堵筹瑟船鸡问题既然你不愿意要AC代码,相信你更想自己把问题找出来只上一个反例看看你的输出是多少
提问者评价
好吧。。我错了,我把int型变量都定义成char了,然后就溢出了,改了就对了,谢谢~
其他类似问题
为您推荐:
acm的相关知识
其他2条回答
for(j=i+1; j& j++)
sum-=(a[j]-'0');
a[j]='0';
if(sum%10)
a[len-1]='0'+10-sum%10;这里条件是到len-1而不是到len吧另外
if(sum%10)
a[len-1]=(a[len-1]-'0'+10-sum%10)%10+'0';还有就是for(i=len-2; i&=0; i--)
if(a[i]!='9')
订储斥肥俪堵筹瑟船鸡
}这个判断条件,你得考虑如果x是小于10的情况,就是1位你既然不给贴ac代码,那我就写到这了。。
看了你的题目描述,英文不太好,不知道理解对不对。题目:定义整数y是x的I-number,Y满足以下条件:y&x;y的各位数字之和是10的倍数;给定x,求满足上述条件的y的最小值;x不大于10^5如果是这个问题的话,可以采用以下思路:给定一个数x,y=x+i(i=1,2,3……,10),若y满足条件2,则找到了满足条件的最小y.由于y的个位数字之和是被10整除,因此最多循环9次就能找出所要的y.程序如下:#include&iostream&using&namespace&//fun()用于计算整数n的各位数字之和是否是10的倍数,是,返回1,不是,返回0;int&fun(int&n){ int&x[6];&&//数组x[6]保存各位数字,由于限定给定的整数不大于10^5,因此最多6位 int&sum=0; for(int&i=0;n&0;i++) {
x[i]&=&n%10;
sum&+=&x[i]; } if(sum%10==0)return&1; else&return&0;}int&main(){&&&&int&x,y,n;&&&&cin&&n;&&&&while(n--)&&&&{&&&&&&&&cin&&x;
for(int&i=1;i&=10;i++)
if(fun(y)){cout&&&the&I-number&of&x&is&&&&y&&}//得到结果,结束循环
} }&&&&return&0;}
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁Time Limit:
MS (Java/Others) Memory Limit:
K (Java/Others)
Total Submission(s): 14031 Accepted Submission(s): 6410
Problem Description
有一群人,打乒乓球比赛,两两捉对撕杀,每两个人之间最多打一场比赛。
球赛的规则如下:
如果A打败了B,B又打败了C,而A与C之间没有进行过比赛,那么就认定,A一定能打败C。
如果A打败了B,B又打败了C,而且,C又打败了A,那么A、B、C三者都不可能成为冠军。
根据这个规则,无需循环较量,或许就能确定冠军。你的任务就是面对一群比赛选手,在经过了若干场撕杀之后,确定是否已经实际上产生了冠军。
输入含有一些选手群,每群选手都以一个整数n(n&1000)开头,后跟n对选手的比赛结果,比赛结果以一对选手名字(中间隔一空格)表示,前者战胜后者。如果n为0,则表示输入结束。
对于每个选手群,若你判断出产生了冠军,则在一行中输出“Yes”,否则在一行中输出“No”。
Sample Input
Smith John
Alice Smith
Sample Output
题目链接:
把冠军理解为参加比赛从没有输过的人,对于输过的人是不可能成为冠军的。
我的思路是:
1,记录每队选手的名字
2,a[i]获胜,b[i]失败
3,在b[i]中是否存在与a[i]相同的,存在就不是胜利者
4,将全部没出现在失败者里的获胜者 的编号存放在c[]数组里,然后再比较
5,比较看是否只有一个人在真的获胜者之中
c++代码:
#include &iostream&
#include &cstring&
int main()
int n,i,j,k;
int sum[1010],c[1010];
//记录是否获胜
char a[],b[];
//记录每队选手的名字
while(cin&&n)
memset(sum,0,sizeof(sum));
//初始化使sum=0,表失败
for(i=0;i&n;i++)
cin&&a[i]&&b[i];
//表示前面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)
for(k=0,i=0;i&n;i++)
//将全部没出现在失败者里的获胜者 的编号存放在c[]数组里,然后再比较
if(sum[i]==1)
int flag=0;
for(i=1;i&k;i++)
if(strcmp(a[c[i]],a[c[i-1]])==0)
//比较看是否只有一个人在真的获胜者之中
if(flag==k-1)
cout&&&Yes&&&
cout&&&No&&&
return 0;
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:8321次
排名:千里之外
原创:68篇
(3)(4)(5)(11)(25)(9)(8)(7)}

我要回帖

更多关于 visual assist 2094 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信