无奈\不解,UvaOJ为啥不提供出错时的测试数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无奈\不解,UvaOJ为啥不提供出错时的测试数据相关的知识,希望对你有一定的参考价值。

总是信心满满地去提交,而UvaOJ只告诉你Wrong answer或者 Runtime error
作为一个供人练习的网,为什么不像USACO一样给出错误时对应的测试数据?
顺便问一下,该如何做UvaOJ的题目?总是错错错。。。信心都没了,关键还不知道哪里错了。。。。

参考技术A usaco只适合入门,很容易让你养成不检查就随便提交的习惯,正规的oj是不会这么做的
ACM中只有正确和错误,要么满分,要么0分,比赛现场更加紧张,因为还算上罚时,每次提交前都要做相当慎重的考虑
OI也很严格,因为没有实时反馈,一点细节问题就会使你爆0
当你没有AC时,能做的就是反复耐心的查程序,注意边界,还有优化。
RE比较好解决,一般是数组越界或递归堆栈溢出,TLE一般是算法时间过高或死循环
一道题卡住半天甚至好几天是很正常的,或许你在提交103次WA后迎来AC也说不定,每一次修复bug都会使你下次尽量避免这样的错误,所以不要轻易放弃一道题
debug的方法很多,设计极限数据,网上解题报告,找标程与自己的比较输出。。。本回答被提问者和网友采纳

uvaoj 101 - The Blocks Problem(vector应用+技巧)

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=835&page=show_problem&problem=37

木块问题,模拟堆的操作。每个堆的高度不确定,用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为啥不提供出错时的测试数据的主要内容,如果未能解决你的问题,请参考以下文章

Maven Install的时候为啥报两个jar的出错

为啥mysql安装不了

动态规划(模型转换):uvaoj 1625 Color Length

为啥虚拟机无法创建快照

为啥mysql卸载后无法安装

为啥我用Microsoft Visual C++ 6.0运行c语言文件出错?