无奈\不解,UvaOJ为啥不提供出错时的测试数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无奈\不解,UvaOJ为啥不提供出错时的测试数据相关的知识,希望对你有一定的参考价值。
总是信心满满地去提交,而UvaOJ只告诉你Wrong answer或者 Runtime error
作为一个供人练习的网,为什么不像USACO一样给出错误时对应的测试数据?
顺便问一下,该如何做UvaOJ的题目?总是错错错。。。信心都没了,关键还不知道哪里错了。。。。
ACM中只有正确和错误,要么满分,要么0分,比赛现场更加紧张,因为还算上罚时,每次提交前都要做相当慎重的考虑
OI也很严格,因为没有实时反馈,一点细节问题就会使你爆0
当你没有AC时,能做的就是反复耐心的查程序,注意边界,还有优化。
RE比较好解决,一般是数组越界或递归堆栈溢出,TLE一般是算法时间过高或死循环
一道题卡住半天甚至好几天是很正常的,或许你在提交103次WA后迎来AC也说不定,每一次修复bug都会使你下次尽量避免这样的错误,所以不要轻易放弃一道题
debug的方法很多,设计极限数据,网上解题报告,找标程与自己的比较输出。。。本回答被提问者和网友采纳
uvaoj 101 - The Blocks Problem(vector应用+技巧)
木块问题,模拟堆的操作。每个堆的高度不确定,用vector来做很合适(vector动态)。
本题模拟四个操作:
1.move a onto b:把a和b上方的木块全部放回原来的堆,然后把a摞在b上面
2.move a over b:把a上方的木块全部放回原来的堆,然后把a放在b所在木块堆的顶部
3.pile a onto b:把b上方的木块全部放回原来的堆,然后把a及上面的木块整体摞在b上面。
4.pile a over b:把a及上面的木块整体摞在b所在木块堆的顶部。
这里有一个技巧:四种指令完全独立处理会使代码变得复杂,容易出错。所以可以提取出他们之间的共同点,以减少重复代码。
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int maxn=30; 4 int n; 5 vector<int> pile[maxn];//每个pile[i]是一个vector 6 //找木块a所在的pile和height,以引用的形式返回调用者 7 void find_block(int a,int& p,int& h) 8 { 9 for(p=0;p<n;p++) 10 { 11 for(h=0;h<pile[p].size();h++) 12 { 13 if(pile[p][h]==a)return; 14 } 15 } 16 } 17 //第P堆高度为h的木块上方的所有木块移回原位 18 void clear_above(int p,int h) 19 { 20 for(int i=h+1;i<pile[p].size();i++) 21 { 22 int b=pile[p][i]; 23 pile[b].push_back(b); 24 } 25 pile[p].resize(h+1);//第p堆只保留下标在0~h之间的元素 26 } 27 //把第p堆高度为h及其上方的木块整体移动到p2堆 28 void pile_onto(int p,int h,int p2) 29 { 30 for(int i=h;i<pile[p].size();i++) 31 { 32 pile[p2].push_back(pile[p][i]); 33 } 34 pile[p].resize(h);//第p堆只保留下标在0~h-1之间的元素 35 } 36 //打印函数 37 void print() 38 { 39 for(int i=0;i<n;i++) 40 { 41 printf("%d:",i); 42 for(int j=0;j<pile[i].size();j++)printf(" %d",pile[i][j]); 43 printf(" "); 44 } 45 } 46 int main() 47 { 48 int a,b; 49 cin>>n; 50 string s1,s2; 51 for(int i=0;i<n;i++)pile[i].push_back(i);//初始化,给木块赋上相应对的编号 52 while(cin>>s1) 53 { 54 if(s1!="quit")cin>>a>>s2>>b; 55 else break; 56 int pa,pb,ha,hb; 57 find_block(a,pa,ha); 58 find_block(b,pb,hb); 59 if(pa==pb)continue; 60 if(s2=="onto")clear_above(pb,hb); 61 if(s1=="move")clear_above(pa,ha); 62 pile_onto(pa,ha,pb); 63 } 64 print(); 65 return 0; 66 }
以上是关于无奈\不解,UvaOJ为啥不提供出错时的测试数据的主要内容,如果未能解决你的问题,请参考以下文章