PAT46,47,48+
来源:互联网 发布:养殖软件下载 编辑:程序博客网 时间:2024/05/16 06:48
- //46.对于重复操作,为避免超时最好得出公式,事先计算好需要的数组对每个输入以O(1)得出结果
- //47.运行超时的时候,把cin改成scanf cout改成printf 更重要的是string改用char*来处理会更快
- //48.找两个数合等于SUM(使用二分查找):SUM=(0+i)+(sum-i) 其中 i from 0 ~ maxsize/2
- //49.counting ones,寻找规律,使得在O(1)得出结果
- //50.new bool[MAX];初始化工作要自己写个循环,否则是随机的。
- #include<iostream>
-
- #define MAX 100000
- int g_Dis[MAX];
- int g_Sum[MAX+1];
- int Min(int a, int b)
- {
- if(a < b)
- return a;
- else return b;
- }
- int main()
- {
- int n;
- while( scanf("%d", &n) != EOF )
- {
- int total = 0;
- g_Sum[0] = 0;
- for(int i = 0; i < n; ++i)
- {
- scanf("%d", &g_Dis[i]);
- total += g_Dis[i];
- if(i == 0)
- g_Sum[i+1] = g_Dis[i];
- else
- g_Sum[i+1] = g_Sum[i]+g_Dis[i];
- }
-
-
-
-
- int m;
- scanf("%d", &m);
- while(m--)
- {
- int a, b;
- scanf("%d%d", &a, &b);
- if(a > b)
- {
- int temp = a;
- a = b;
- b = temp;
- }
- int ans = g_Sum[b-1]-g_Sum[a-1];
- ans = Min(ans, total-ans);
- printf("%d\n", ans);
- }
- }
- return 0;
- }