北邮-上机-提交错误解决及一些经验

来源:互联网 发布:手机淘宝推广平台 编辑:程序博客网 时间:2024/05/22 11:36

1、出现Time Limit Exceed问题

答:三种原因:1、程序死循环或太多的循环;2、对极限状况计算量太大,需要优化程序,如对10000个以上进行排序必须使用快速排序;3、程序错了。还有一种原因:题目中说n是整数,可能输入0啊或-10啊,不一定都是正数,也可能n=10亿之类的。你循环就累死你。。。

还有一种情况就是,如果cout不行,那就换c语言!!!

2、Presentation Error : 答案基本正确,但是格式不对。

答:出现这种问题主要是输出格式的问题,主要是控制最后一个输出时的格式,后面不能有空格。

3、对于多组输入数据输出结果

答:一般是每组就要对应一个结果

4、出现超时的处理技巧

答:(1)对于while(1){},一般会出现超时,可以先有一个while(cin>>x){for()...}

详见1115.

(2)还有,就是实在不行就选择C语言的输入方式。

(3)对于scanf输入方式,如果不是数组,必须有“&”符号

        While(scanf(%d %d,&a,&b)){}

5、对于多组输入且结束符是(0,0)

答:可能不需要存储其他的信息,只需要将结果显示出来即可。

   While(cin>>x>>y&&(x||y))

   While(cin>>x>>y&&(x||y)),可以用两组输入信息。

6、sort()函数

答:其头文件是<algorithm>

7、对于题中多组输入对应多组输出的

答:每输入一组则就输出一组结果。

如:

8、对于题中有讲到数据的范围的,一定要处理边界的情况!!!

答:如:接下来有T行,每行有一个数字n(0<=n<=10^8),表示要求的二进制串。,则一定要考虑到n为0的情况输出的结果!!

9、输入字符串

答:char array[100];

   While(scanf(%s,array)!=EOF){}

10、含有malloc(),要包含头文件<malloc.h>

11、参数引用的情况(树)

12、对于一些过程,不必保留中间数据,只要知道结果。如:开门人和关门人

13、理解结束条件

答:(1)当读到'#'时输入结束,相应的结果不要输出。1021

(2)注意(0, 0)不作为任何一个测试用例里面的点。一个没有点的测试用例标志着整个输入的结束。1020 \\while(cin>>x>>y&&(x||y))

14、读入含有空格的字符串,可用gets()函数;

15、对于sort()函数,其头文件<algorithm.h>

16、杨辉三角形初始化

void init()//初始化,将杨辉三角形存储在f[1000][1000]中 

{

     int i,j;

     f[2][1] = f[2][2] = 1;

     for(i=3;i<1000;i++)

     {

         f[i][1] = f[i][i] = 1;

         for(j=2;j<i;j++) f[i][j] = f[i-1][j-1] + f[i-1][j];

     }     

}

17#include<iostream>

using namespace std;

int main()

{

    int num[2000];

    int i,a,b,x,y,len,n;

    while(cin>>n)

    {

    for(i=0;i<2*n;i++)//存入数组 

    {

         cin>>a>>b;

         num[i] = a;

         i++;

         num[i] = b;

    }

    x = num[0];//初始化x,x的最小值

    y = num[1];//初始化y,x相等时,存y的最小值 

    //len = sizeof(num)/sizeof(num[0]);

    len = 2*n;

    

    //for(i=0;i<len;i++){cout<<num[i]<<' ';}

    // cout<<"hello"<<endl;

    for(i=2;i<len;)

    {

         if(num[i]<x)

         {

           x = num[i];

           y = num[i+1];

           i = i+2;    

           continue;

           //cout<<"hello"<<endl;       

         }

         else if(num[i]==x)

         {

             if(num[i+1]<y)

             {

                    y = num[i+1];

                    i = i+2;

                    continue;          

             } 

         }

         else {i = i+2;continue;}

    }

    

    cout<<x<<' '<<y<<endl;

}

    return 0;    

18、冒泡排序

答:N个数据,进行N-1轮排序,每轮进行N-1-i次交换。如:10个数据,则进行9轮排序,每轮进行9-i次交换。

    for(i=0;i<4;i++)

    {

       for(j=0;j<4-i;j++)

       {

           if(a[j]>a[j+1])//大数下沉

           {

              temp = a[j];

              a[j] = a[j+1];

              a[j+1] = temp;

                             

           }                  

       }                

19、对于数组,scanf("%d",&a[i]);

20、C语言中,system("pause");在同文件#include<stdlib.h>中。

问:我的程序是如何输入又是怎样输出的?

答:你的程序应该是用stdio输入(标准的输入流),输出应该是用stdout输出(标准的输出流).比如说:你可以使用 里面的 scanf 和 C++ 里面的cin 来读入,而使用 里面 printf 或 C++ 里面的cout 来写出。 你提交的程序将不允许进行任何文件的操作。你有可能为此而得到 Runtime Error 或者 Wrong Answer。 值得注意的是:G++ 中的 I/O 操作,是基于比较复杂的实现模式,相对于 scanf 和 printf 而言,cincout要慢很多。 经验表明他们之间的差异在当你使用 G++ 作为编译器的时候显得尤为突出。所以当一个问题要求有比较大量的输入和 输出时,cin 和 cout 将会导致Time Limit Exceed 

21、值得注意的是:对64-bit integers,请使用 long long 进行申明,GNU 不支持__int64,输入输出使用lld.例如:
long long a;
scanf("%lld",&a), printf ("%lld",a);

原创粉丝点击