T1 最大值(max)

Time Limit:1000ms   Memory Limit:128MB

题目描述

LYK有一本书,上面有很多有趣的OI问题。今天LYK看到了这么一道题目:

这里有一个长度为n的正整数数列ai(下标为1~n)。并且有一个参数k。

你需要找两个正整数x,y,使得x+k<=y,并且y+k-1<=n。并且要求a[x]+a[x+1]+…+a[x+k-1]+a[y]+a[y+1]+…+a[y+k-1]最大。

LYK并不会做,于是它把题扔给了你。

输入格式(max.in)

第一行两个数n,k。

第二行n个数,表示ai。

输出格式(max.out)

两个数表示x,y。若有很多种满足要求的答案,输出x最小的值,若x最小仍然还有很多种满足要求的答案,输出y最小的值。

输入样例

5 2

6 1 1 6 2

输出样例

1 4

对于30%的数据n<=100。

对于60%的数据n<=1000

对于100%的数据1<=n<=100000,1<=k<=n/2,1<=ai<=10^9。

  1. #include <cstdio>
  2.  
  3. #define LL long long
  4.  
  5. inline void read(LL &x)
  6. {
  7. x=; register char ch=getchar();
  8. for(; ch>''||ch<''; ) ch=getchar();
  9. for(; ch>=''&&ch<=''; ch=getchar()) x=x*+ch-'';
  10. }
  11.  
  12. const int N();
  13. LL n,k,r,x,y,a[N],sum[N],ans;
  14.  
  15. int Presist()
  16. {
  17. freopen("max.in","r",stdin);
  18. freopen("max.out","w",stdout);
  19. read(n),read(k); r=n-k+;
  20. for(int i=; i<=n; ++i)
  21. read(a[i]),sum[i]=sum[i-]+a[i];
  22. for(x=; x<=n; ++x)
  23. if(ans<sum[r]-sum[x-]) ans=sum[r]-sum[x-];
  24. for(x=; x<=n; ++x)
  25. if(ans==sum[r]-sum[x-]) { y=x+k; break; }
  26. for(; y<=r; ++y)
  27. if(sum[y]-sum[x-]==ans) break;
  28. printf("%I64d %I64d",x,y);
  29. return ;
  30. }
  31.  
  32. int Aptal=Presist();
  33. int main(int argc,char**){;}

读错题目全挂掉

处理出以每个点为起点,向后延伸k个单位长度的区间和,和每个点的后缀最大值

  1. #include <cstdio>
  2.  
  3. #define LL long long
  4. #define max(a,b) (a>b?a:b)
  5.  
  6. inline void read(LL &x)
  7. {
  8. x=; register char ch=getchar();
  9. for(; ch>''||ch<''; ) ch=getchar();
  10. for(; ch>=''&&ch<=''; ch=getchar()) x=x*+ch-'';
  11. }
  12.  
  13. const int N();
  14. LL n,k,r,x,y,max,sum[N];
  15. LL pos[N],maxn[N],sumk[N];
  16.  
  17. int Presist()
  18. {
  19. freopen("max.in","r",stdin);
  20. freopen("max.out","w",stdout);
  21. read(n),read(k); r=n-k+;
  22. for(int i=; i<=n; ++i) read(sum[i]),sum[i]+=sum[i-];
  23. for(int i=; i<=r; ++i)
  24. sumk[i]=sum[i+k-]-sum[i-];
  25. for(int i=r; i; i--)
  26. if(sumk[i]>maxn[i+]) maxn[i]=sumk[i],pos[i]=i;
  27. else maxn[i]=maxn[i+],pos[i]=pos[i+];
  28. for(int i=; i<=r-k; ++i)
  29. if(sumk[i]+maxn[i+k]>max) max=sumk[i]+maxn[i+k],x=i,y=pos[i+k];
  30. else if(sumk[i]+maxn[i+k]==max) y=y<pos[i+k]?y:pos[i+k];
  31. printf("%I64d %I64d",x,y);
  32. return ;
  33. }
  34.  
  35. int Aptal=Presist();
  36. int main(int argc,char**){;}

AC

T2 吃东西(eat)

Time Limit:2000ms   Memory Limit:1024MB

题目描述

一个神秘的村庄里有4家美食店。这四家店分别有A,B,C,D种不同的美食。LYK想在每一家店都吃其中一种美食。每种美食需要吃的时间可能是不一样的。

现在给定第1家店A种不同的美食所需要吃的时间a1,a2,…,aA。

给定第2家店B种不同的美食所需要吃的时间b1,b2,…,bB。

以及c和d。

LYK拥有n个时间,问它有几种吃的方案。

输入格式(eat.in)

第一行5个数分别表示n,A,B,C,D。

第二行A个数分别表示ai。

第三行B个数分别表示bi。

第四行C个数分别表示ci。

第五行D个数分别表示di。

输出格式(eat.out)

一个数表示答案。

输入样例

11 3 1 1 1

4 5 6

3

2

1

输出样例

2

对于30%的数据A,B,C,D<=50

对于另外30%的数据n<=1000。

对于100%的数据1<=n<=100000000,1<=A,B,C,D<=5000,0<=ai,bi,ci,di<=100000000。

  1. #include <algorithm>
  2. #include <cstdio>
  3.  
  4. inline void read(int &x)
  5. {
  6. x=; register char ch=getchar();
  7. for(; ch>''||ch<''; ) ch=getchar();
  8. for(; ch>=''&&ch<=''; ch=getchar()) x=x*+ch-'';
  9. }
  10. const int N();
  11. int n,na,nb,nc,nd,sa,sb,sc;
  12. int a[N],b[N],c[N],d[N],ans;
  13.  
  14. int Presist()
  15. {
  16. freopen("eat.in","r",stdin);
  17. freopen("eat.out","w",stdout);
  18. read(n),read(na),read(nb),read(nc),read(nd);
  19. for(int i=; i<=na; ++i) read(a[i]); std::sort(a+,a+na+);
  20. for(int i=; i<=nb; ++i) read(b[i]); std::sort(b+,b+nb+);
  21. for(int i=; i<=nc; ++i) read(c[i]); std::sort(c+,c+nc+);
  22. for(int i=; i<=nd; ++i) read(d[i]); std::sort(d+,d+nd+);
  23. for(int i=; i<=na; ++i)
  24. {
  25. sa=a[i]; if(sa>n) break;
  26. for(int j=; j<=nb; ++j)
  27. {
  28. sb=sa+b[j]; if(sb>n) break;
  29. for(int p=; p<=nc; ++p)
  30. {
  31. sc=sb+c[p]; if(sc>n) break;
  32. for(int q=; q<=nd; ++q)
  33. {
  34. if(sc+d[q]>n) break;
  35. else ans++;
  36. }
  37. }
  38. }
  39. }
  40. printf("%d\n",ans);
  41. return ;
  42. }
  43.  
  44. int Aptal=Presist();
  45. int main(int argc,char**){;}

30分 暴力

sum记录C D 每种时间出现的次数,枚举 i,j 判断 n-a[i]-b[j] 的次数

  1. #include <algorithm>
  2. #include <cstdio>
  3.  
  4. #define LL long long
  5.  
  6. #define max(a,b) (a>b?a:b)
  7. #define min(a,b) (a<b?a:b)
  8.  
  9. inline void read(LL &x)
  10. {
  11. x=; register char ch=getchar();
  12. for(; ch>''||ch<''; ) ch=getchar();
  13. for(; ch>=''&&ch<=''; ch=getchar()) x=x*+ch-'';
  14. }
  15. const int N();
  16. LL n,food[][N],f[][N],ans;
  17. int sum[];
  18. bool flag;
  19.  
  20. inline void violence_30() //50^4,暴力判断 30分
  21. {
  22. for(int i=; i<=food[][]; ++i)
  23. for(int j=; j<=food[][]; ++j)
  24. for(int p=; p<=food[][]; ++p)
  25. for(int q=; q<=food[][]; ++q)
  26. ans+=(food[][i]+food[][j]+food[][p]+food[][q]<=n);
  27. }
  28. inline void violence_another_30() // 分组背包 n*(A\B\C\D)枚举
  29. {
  30. for(int i=; i<=n; ++i) f[][i]=;
  31. for(int k=; k<; ++k)
  32. for(int i=; i<=n; ++i)
  33. for(int j=; j<=food[k][]; ++j)
  34. if(i>=food[k][j]) f[k][i]+=f[k-][i-food[k][j]];
  35. ans=f[][n];
  36. }
  37. inline void no_wa_and_all_ac()
  38. {
  39. LL minn=2e8+,maxx=-;
  40. for(int i=; i<=food[][]; ++i)
  41. for(int j=; j<=food[][]; ++j)
  42. {
  43. sum[food[][i]+food[][j]]++;
  44. minn=min(minn,food[][i]+food[][j]);
  45. maxx=max(maxx,food[][i]+food[][j]);
  46. }
  47. for(int i=minn; i<=maxx; ++i) sum[i]+=sum[i-];
  48. for(int i=; i<=food[][]; ++i)
  49. for(int j=; j<=food[][]; ++j)
  50. if(n-food[][i]-food[][j]>=)
  51. ans+=sum[ min(maxx,n-food[][i]-food[][j]) ];
  52. }
  53.  
  54. int Presist()
  55. {
  56. freopen("eat.in","r",stdin);
  57. freopen("eat.out","w",stdout);
  58. read(n); for(int i=; i<; ++i) read(food[i][]);
  59. for(int i=; i<; ++i)
  60. for(int j=; j<=food[i][]; ++j)
  61. read(food[i][j]);
  62. for(int i=; i<; ++i)
  63. if(food[i][]>) flag=;
  64. if(n<=) violence_another_30();
  65. else if(!flag) violence_30();
  66. else no_wa_and_all_ac();
  67. printf("%I64d",ans);
  68. return ;
  69. }
  70.  
  71. int Aptal=Presist();
  72. int main(int argc,char**){;}

AC

T3 分糖果(candy)

Time Limit:1000ms   Memory Limit:128MB

题目描述

总共有n颗糖果,有3个小朋友分别叫做L,Y,K。每个小朋友想拿到至少k颗糖果,但这三个小朋友有一个共同的特点:对3反感。也就是说,如果某个小朋友拿到3颗,13颗,31颗,333颗这样数量的糖果,他就会不开心。(也即它拿到的糖果数量不包含有一位是3)

LYK掌管着这n颗糖果,它想问你有多少种合理的分配方案使得将这n颗糖果全部分给小朋友且没有小朋友不开心。

例如当n=3,k=1时只有1种分配方案,当n=4,k=1时有3种分配方案分别是112,121,211。当n=7,k=2时则不存在任何一种合法的方案。

当然这个答案可能会很大,你只需输出答案对12345647取模后的结果就可以了。

输入格式(candy.in)

第一行两个数表示n,k。

输出格式(candy.out)

一个数表示方案总数。

输入样例

99999 1

输出样例

9521331

对于30%的数据n<=100

对于50%的数据n<=1000。

对于另外30%的数据k=1。

对于100%的数据3<=n<=10^10000,1<=k<=n/3,且n,k不包含前导0。

  1. #include <cstdio>
  2.  
  3. #define LL long long
  4. inline void read(LL &x)
  5. {
  6. x=; register char ch=getchar();
  7. for(; ch>''||ch<''; ) ch=getchar();
  8. for(; ch>=''&&ch<=''; ch=getchar()) x=x*+ch-'';
  9. }
  10. LL n,k,ans;
  11.  
  12. inline bool if_cant(LL x)
  13. {
  14. for(; x; x/=)
  15. if(x%==) return ;
  16. return ;
  17. }
  18.  
  19. int Presist()
  20. {
  21. freopen("candy.in","r",stdin);
  22. freopen("candy.out","w",stdout);
  23.  
  24. read(n),read(k);
  25. for(LL t,i=k; i<=n; ++i)
  26. {
  27. if(if_cant(i)) continue;
  28. for(LL j=k; j<=n-i; ++j)
  29. {
  30. if(if_cant(j)) continue;
  31. t=n-i-j;
  32. ans+=(t>=k&&(!if_cant(t)));
  33. }
  34. }
  35. printf("%I64d\n",ans);
  36. return ;
  37. }
  38.  
  39. int Aptal=Presist();
  40. int main(int argc,char**){;}

50分暴力

数位DP

  1. #include<cstdio>
  2. #include<cstring>
  3.  
  4. #define N 10003
  5.  
  6. using namespace std;
  7.  
  8. const int mod=;
  9.  
  10. char s[N];
  11. int a[N],b[N],dp[N][][][][];
  12.  
  13. void ADD(int &i,int j) { i+=j; if(i>=mod) i-=mod; }
  14.  
  15. int main()
  16. {
  17. freopen("candy.in","r",stdin);
  18. freopen("candy.out","w",stdout);
  19. scanf("%s",s+); int len1=strlen(s+);
  20. for(int i=;i<=len1;++i) a[i]=s[i]-'';
  21. scanf("%s",s+); int len2=strlen(s+);
  22. for(int i=;i<=len2;++i) b[i+len1-len2]=s[i]-'';
  23. dp[][][][][]=;
  24. int i,j,k,l,t,I,J,K,L,T;
  25. for(i=;i<len1;i++)
  26. for(j=;j<;j++)
  27. for(k=;k<;k++)
  28. for(l=;l<;l++)
  29. for(t=;t<;t++)
  30. if(dp[i][j][k][l][t])
  31. for(int s1=;s1<=;s1++)
  32. if(s1!=)
  33. for(int s2=;s2<=;s2++)
  34. if(s2!=)
  35. for(int s3=;s3<=;s3++)
  36. if(s3!=)
  37. {
  38. I=i+;
  39. J=j*+a[i+]-s1-s2-s3;
  40. if(J< || J>) continue;
  41. if(!k && s1<b[i+]) continue;
  42. K=(k || s1>b[i+]);
  43. if(!l && s2<b[i+]) continue;
  44. L=(l || s2>b[i+]);
  45. if(!t && s3<b[i+]) continue;
  46. T=(t || s3>b[i+]);
  47. ADD(dp[I][J][K][L][T],dp[i][j][k][l][t]);
  48. }
  49. int ans=;
  50. for(k=;k<;k++)
  51. for(l=;l<;l++)
  52. for(t=;t<;t++)
  53. ADD(ans,dp[len1][][k][l][t]);
  54. printf("%d",ans);
  55. }

AC

2017-10-02-afternoon的更多相关文章

  1. phpStudy + JspStudy 2014.10.02 下载

    phpStudy + JspStudy 2014.10.02 下载 目标:让天下没有难配的php环境. phpStudy Linux版&Win版同步上线 支持Apache/Nginx/Teng ...

  2. 九月 26, 2017 10:18:14 上午 com.sun.jersey.server.impl.application.RootResourceUriRules <init> 严重: The ResourceConfig instance does not contain any root resource classes.

    Tomcat启动错误:九月 26, 2017 10:18:14 上午 com.sun.jersey.server.impl.application.RootResourceUriRules <i ...

  3. 2017/10 冲刺NOIP集训记录:暁の水平线に胜利を刻むのです!

    前几次集训都没有记录每天的点滴……感觉缺失了很多反思的机会. 这次就从今天开始吧!不能懈怠,稳步前进! 2017/10/1 今天上午进行了集训的第一次考试…… 但是这次考试似乎是近几次我考得最渣的一次 ...

  4. Adobe Audition CC 2017 (10.0)安装教程

    Adobe Audition CC 2017 (10.0)安装教程 注:下载地址在文章末尾 第一步:首先请将电脑的网络断开,很简单:禁用本地连接或者拔掉网线,这样就可以免除登录Creative Clo ...

  5. Xamarin 2017.10.9更新

     Xamarin 2017.10.9更新 本次更新主要解决了一些bug.Visual Studio 2017升级到15.4获得新功能.Visual Studio 2015需要工具-选项-Xamarin ...

  6. 2017.10.12 Java的计数器的开发

    //我们用一个合成的applet/application来简单显示出一个计数器的结果/** * Created by qichunlin on 2017/10/12. */ /*简单的计数器*/ im ...

  7. 2017.10.10 java中的继承与多态(重载与重写的区别)

    1. 类的继承 继承是面向对象编程技术的主要特征之一,也是实现软件复用的重要手段,使用继承特性子类(subclass) 可以继承父类(superclass)中private方法和属性,继承的目的是使程 ...

  8. 07/29/2013 02:10:02 AM - CMDPHP: Poller[0] Host[6] DS[10] WARNING: Result from SNMP not valid. Partial Result: U

    snmpwalk -c public -v2c  客户端ip地址  自定义的oid  能取到数据,但是服务器端就是图片一片空白 rrdtool fetch 文件名.rrd 查看到的全都是nan cac ...

  9. 2017.10.31 Enginer+position+statement

    一.The basic information Post name Engineering manager Department Engineering Post member A24645 imme ...

  10. 2017.10.23 Java 面向对象深入学习---final 关键字、static关键字、匿名对象等

    今日内容介绍 1.final 关键字 2.static 关键字 3.匿名对象 4.内部类 5.包的声明与访问 6.访问修饰符 7.代码块 第一节课 01(面向对象)final关键字概念.avi 02: ...

随机推荐

  1. AJPFX关于数组获取最值的思路和方法

    思路分析:1.定义一个变量(max,初始值一般为数组中的第一个元素值),用来记录最大值.2.遍历数组,获取数组中的每一个元素,然后依次和max进行比较.如果当前遍历到的元素比max大,就把当前元素值给 ...

  2. 谷歌的 I/O 2019,究竟推出了什么新特性?

    前言 昨天,也即赶在微软 Build 2019 的第二天,一年一度的2019年 Google I/O大会在美国如期举行,Google I/O 2019全纪录:AI惊艳,Android Q真香,包括两款 ...

  3. kalman滤波器公式的推导

    卡尔曼滤波的使用范围: 该系统要有如下关系: 计算步骤: PART0:INI PART1:Time update 迭代的目标:从X(K-1)+ 求得X(K) + 因此,先有X(K-1)+,已知F,G. ...

  4. 打包Scala jar 包的正确步骤

    实验目的:打包可运行的scala jar,上传到spark集群,提交执行 1.idea中编译运行代码,可成功运行 2.修改2处代码//只配置appName,其他配置项注释掉val conf=new S ...

  5. apache设置无缓存

    打开httpd.conf 开启扩展 确保开启 LoadModule headers_module modules/mod_headers.so 添加配置项 并添加以下配置,跟据文件类型来让浏览器每次都 ...

  6. 看到了一篇不错的tensorflow文章

    http://dataunion.org/28906.html 本文作者 Steven Dufresne,总结了新手学 TensorFlow 需要的核心知识点和实操内容,旨在鼓励更多人借 Tensor ...

  7. laravel学习:容器绑定与解析

    1.在服务容器中注册类(bind) $this->app->bind('sender','MailSender');//$this->app成为服务容器.   2.从服务容器生成类( ...

  8. CREATE TABLE AS - 从一条查询的结果中创建一个新表

    SYNOPSIS CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE table_name [ (column_name [, ...] ...

  9. CREATE OPERATOR CLASS - 定义一个新的操作符类

    SYNOPSIS CREATE OPERATOR CLASS name [ DEFAULT ] FOR TYPE data_type USING index_method AS { OPERATOR ...

  10. arch - 显示机器的体系结构

    总览 (SYNOPSIS) arch 描述 (DESCRIPTION) arch 等同于 uname -m. 目前的 Linux 系统上, arch 显示 的 数据 有 "i386" ...