1040 Be Patient , Read Carefully !【子串和】

来源:互联网 发布:java中文文档 编辑:程序博客网 时间:2024/06/08 02:33

Be Patient , Read Carefully !

时间限制:1000 ms  |  内存限制:65535 KB
难度:0
描述
(原文讲的是白雪公主的故事,和题目没有关系,这里已经省略......)

    

BlaBlaBla...

反正你是读不懂题目在说什么的...但是你偷偷看到了Fongliqian 的代码:

#include<stdio.h>

int main()

{

    int i,j,cnt,k,N,K,a[5555];

    scanf("%d%d",&N,&K);

    int ans=0;

    for(i=1;i<=N;i++) scanf("%d",&a[i]);

    for( i=1;i<=N;i++)

      for(j=i+1;j<=N;j++)

       {

           cnt=0;

           for( k=i;k<=j;k++) cnt+=a[k];

           if(cnt%K==0) ans++;

       }

    printf("%d\n",ans);

}


    然后你又偷偷问了Yomeam,他跟你说这样会超时(不管你信不信,反正我是信了,不信你复制粘贴上去看看?)

输入
(只有一组数据)
第一行2个整数 N K N<= 5000 K>0
第二行N个数a[i]: 第i个数为a[i] 0<= a[i]<= 10000
输出
结果,换行。
样例输入
5 11 2 3 4 5
样例输出
10

这个题是目前唯一一个做过的给你代码,让你理解运行的功能,然后自己个更优化的程序来解决这个问题!

不难看出,这个程序要求的是给出的序列的子串(多于一个元素)能被 给出的数整除的个数,输出个数...

简化方法是,在输入的时候预处理一下,把时间复杂度降到n的平方,这样就不会超时了......


 #include<stdio.h>int x[5005],n,k;void slove(){int cnt=0;for(int i=2;i<=n;++i)//注意两层循环的控制{for(int j=0;j<i-1;++j){int sum=x[i]-x[j];//子串和if(sum%k==0){++cnt;//统计}}}printf("%d\n",cnt);}int main(){while(~scanf("%d%d",&n,&k)){for(int i=1;i<=n;++i){scanf("%d",x+i);if(i>1){x[i]+=x[i-1];//预处理...} }slove();}return 0;}        





0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 安全瓶盖坏了怎么办 刚买面霜打不开怎么办 可乐瓶盖鼓起来怎么办 暖壶塞子吸住了怎么办 茶兀瓶盖打不开怎么办 水杯盖太紧了拧不开怎么办 矿泉水瓶盖拧不开了怎么办 弩弦用手拉不上怎么办 茅台酒瓶口漏酒怎么办 化妆品盖子丢了怎么办 化妆品盖子碎了怎么办 自制水泵压力小怎么办 大学数学不会做怎么办 下雪了怎么办教案幼儿园小班 下水道被混凝土堵塞怎么办 日本足贴丢了胶布怎么办 牙齿被可乐腐蚀怎么办 三十岁满嘴无牙怎么办 水乳盖子打不开怎么办 蜂蜜罐子打不开了怎么办 蜂蜜盖子第二次拧不开怎么办 玻璃杯子拧不开盖子怎么办 玻璃杯水杯盖子拧不开怎么办 鞋子蝴蝶结掉了怎么办 蝴蝶翅膀受伤了怎么办 手被割了个口子怎么办 致炫方向盘重怎么办 黑檀7打不透怎么办 乒乓球底板太轻怎么办 狙击精英4卡怎么办 鼠标点一下变两下怎么办 工程干完不给钱怎么办 屋里有大蛾子怎么办 房间很多小飞虫怎么办 雷蛇键盘失灵怎么办 xp驱动 不支持win10怎么办 阿提拉全面战争统治度太低怎么办 微信号变成wxid怎么办 ipv4 ipv6未连接怎么办 土豆丝粘锅怎么办还面 土豆丝容易碎怎么办