zoukankan      html  css  js  c++  java
  • 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
    ",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
    ", 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 ",b[p]); return 0; }
  • 相关阅读:
    MIKROTIK ROS+PHP+MYSQL实现从数据库中配置DNS服务器
    随手记
    05 通过python开启静态http服务
    名称空间和作用域
    cs常用功能
    初识Cobalt Strike
    msf之手机木马生成&利用
    msf之meterpreter命令
    BURPSUITE的常用模块
    BURPSUITE专业汉化版安装
  • 原文地址:https://www.cnblogs.com/zhangzimu/p/6160735.html
Copyright © 2011-2022 走看看