acm 士兵杀敌(一)

士兵杀敌(一)

时间限制:1000 ms  |  内存限制:65535 KB
难度:3
 
描述

南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的。

小工是南将军手下的军师,南将军现在想知道第m号到第n号士兵的总杀敌数,请你帮助小工来回答南将军吧。

注意,南将军可能会问很多次问题。

 
输入
只有一组测试数据
第一行是两个整数N,M,其中N表示士兵的个数(1<N<1000000),M表示南将军询问的次数(1<M<100000)
随后的一行是N个整数,ai表示第i号士兵杀敌数目。(0<=ai<=100)
随后的M行每行有两个整数m,n,表示南将军想知道第m号到第n号士兵的总杀敌数(1<=m,n<=N)。
输出
对于每一个询问,输出总杀敌数
每个输出占一行
样例输入
5 2
1 2 3 4 5
1 3
2 4
样例输出
6
9


#include<stdio.h>
#include<malloc.h>
int main(){
    int P,N,M,m,n,i,j,s=0,*p=(int *)malloc(1000000*sizeof(int)), *q=(int *)malloc(1000000*sizeof(int));
    scanf("%d%d",&N,&M);
    for(i=1;i<=N;i++)
        {
        scanf("%d",&p[i]);
    
        }
    for(i=1;i<=N;i++){
        
    if(p[i]>0&&p[i]<=100){
    
    for(P=0;P<M;P++){
    scanf("%d%d",&m,&n);
    if(m>=1&&n<=N){
    for(j=m;j<=n;j++)
         {
        q[P]+=p[j]; 
        }}
    }}
    for(P=0;P<M;P++)
    printf("%d\n",q[P]);}
free(p);
free(q);
return 0;
}
    

 

 

错误信息

运行时间:2016-12-11 21:49:20  | 用户:张子木
 
程序运行超时:
你的程序太慢了,想想办法改进一下速度吧。。
在测试数据很多(几百万个数),而你又用的cin,cout进行输入输出时,也可能会出现超时,改成scanf,printf即可
也有可能是你的程序陷入了死循环不能退出了
 
 
 
 
我想哭。。。。。。
 
怎么了是。。。。
于是我百度了一下,得到一个代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int a[1123456];
int sum[1123456];
int main()
{
    int n, m;
    scanf("%d %d", &n, &m);
    int i;
    for(i = 1;i <= n;i++){
        scanf("%d", &a[i]);
        sum[i] = sum[i-1]+a[i];
    }
    int a, b;
    for(i = 0;i < m;i++){
        scanf("%d %d", &a, &b);
        printf("%d\n", sum[b]-sum[a-1]);
    }


    return 0;
}

然后我就醉了。。。

我之前也是这样写的,但是一运行就停止运行的,然后想到可能是数组的长度太大了,然后把数组大小变成了10,确实运行正常。。

可是上面这个好像比我的还要大啊。。。。。

下面是我之前的

#include<stdio.h>
#include<Windows.h>
int main(){
  int p,N,M,m,n,i,j,s=0,a[1000000]={0},b[1000000]={0};
  scanf("%d%d",&N,&M);
  for(i=1;i<=N;i++)
  {
    scanf("%d",&a[i]);
    if(a[i]<0||a[i]>100) exit(0);
}
for(p=0;p<M;p++){
  scanf(
"%d%d",&m,&n);
    if(m<1||n>N) exit(0);
      for(j=m;j<=n;j++)         {
          b[p]
+=a[j];
} }
for(p=0;p<M;p++) printf("%d\n",b[p]); return 0; }

 

posted @ 2016-12-11 21:54  张子木  阅读(543)  评论(0编辑  收藏  举报