PAT46,47,48+

来源:互联网 发布:养殖软件下载 编辑:程序博客网 时间:2024/05/16 06:48
  1. //46.对于重复操作,为避免超时最好得出公式,事先计算好需要的数组对每个输入以O(1)得出结果
  2. //47.运行超时的时候,把cin改成scanf cout改成printf  更重要的是string改用char*来处理会更快
  3. //48.找两个数合等于SUM(使用二分查找):SUM=(0+i)+(sum-i)  其中 i from 0 ~ maxsize/2
  4. //49.counting ones,寻找规律,使得在O(1)得出结果
  5. //50.new bool[MAX];初始化工作要自己写个循环,否则是随机的。
  6. #include<iostream>  
  7.   
  8. #define MAX 100000  
  9. int g_Dis[MAX];  
  10. int g_Sum[MAX+1];  
  11. int Min(int a, int b)  
  12. {  
  13.     if(a < b)  
  14.         return a;  
  15.     else return b;  
  16. }  
  17. int main()  
  18. {  
  19.     int n;  
  20.     while( scanf("%d", &n) != EOF )  
  21.     {  
  22.         int total = 0;  
  23.         g_Sum[0] = 0;  
  24.         for(int i = 0; i < n; ++i)  
  25.         {  
  26.             scanf("%d", &g_Dis[i]);  
  27.             total += g_Dis[i];  
  28.             if(i == 0)  
  29.                 g_Sum[i+1] = g_Dis[i];  
  30.             else  
  31.                 g_Sum[i+1] = g_Sum[i]+g_Dis[i];  
  32.         }  
  33.         /*for(int i = 0; i <= n; ++i) 
  34.             printf("%d ", g_Sum[i]); 
  35.         printf("\n");*/  
  36.         //quest  
  37.         int m;  
  38.         scanf("%d", &m);  
  39.         while(m--)  
  40.         {  
  41.             int a, b;  
  42.             scanf("%d%d", &a, &b);  
  43.             if(a > b)  
  44.             {  
  45.                 int temp = a;  
  46.                 a = b;  
  47.                 b = temp;  
  48.             }  
  49.             int ans = g_Sum[b-1]-g_Sum[a-1];  
  50.             ans = Min(ans, total-ans);  
  51.             printf("%d\n", ans);  
  52.         }  
  53.     }  
  54.     return 0;  
  55. }  
原创粉丝点击