2017-10-02-afternoon
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。
#include <cstdio> #define LL long long inline void read(LL &x)
{
x=; register char ch=getchar();
for(; ch>''||ch<''; ) ch=getchar();
for(; ch>=''&&ch<=''; ch=getchar()) x=x*+ch-'';
} const int N();
LL n,k,r,x,y,a[N],sum[N],ans; int Presist()
{
freopen("max.in","r",stdin);
freopen("max.out","w",stdout);
read(n),read(k); r=n-k+;
for(int i=; i<=n; ++i)
read(a[i]),sum[i]=sum[i-]+a[i];
for(x=; x<=n; ++x)
if(ans<sum[r]-sum[x-]) ans=sum[r]-sum[x-];
for(x=; x<=n; ++x)
if(ans==sum[r]-sum[x-]) { y=x+k; break; }
for(; y<=r; ++y)
if(sum[y]-sum[x-]==ans) break;
printf("%I64d %I64d",x,y);
return ;
} int Aptal=Presist();
int main(int argc,char**){;}
读错题目全挂掉
处理出以每个点为起点,向后延伸k个单位长度的区间和,和每个点的后缀最大值
#include <cstdio> #define LL long long
#define max(a,b) (a>b?a:b) inline void read(LL &x)
{
x=; register char ch=getchar();
for(; ch>''||ch<''; ) ch=getchar();
for(; ch>=''&&ch<=''; ch=getchar()) x=x*+ch-'';
} const int N();
LL n,k,r,x,y,max,sum[N];
LL pos[N],maxn[N],sumk[N]; int Presist()
{
freopen("max.in","r",stdin);
freopen("max.out","w",stdout);
read(n),read(k); r=n-k+;
for(int i=; i<=n; ++i) read(sum[i]),sum[i]+=sum[i-];
for(int i=; i<=r; ++i)
sumk[i]=sum[i+k-]-sum[i-];
for(int i=r; i; i--)
if(sumk[i]>maxn[i+]) maxn[i]=sumk[i],pos[i]=i;
else maxn[i]=maxn[i+],pos[i]=pos[i+];
for(int i=; i<=r-k; ++i)
if(sumk[i]+maxn[i+k]>max) max=sumk[i]+maxn[i+k],x=i,y=pos[i+k];
else if(sumk[i]+maxn[i+k]==max) y=y<pos[i+k]?y:pos[i+k];
printf("%I64d %I64d",x,y);
return ;
} int Aptal=Presist();
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。
#include <algorithm>
#include <cstdio> inline void read(int &x)
{
x=; register char ch=getchar();
for(; ch>''||ch<''; ) ch=getchar();
for(; ch>=''&&ch<=''; ch=getchar()) x=x*+ch-'';
}
const int N();
int n,na,nb,nc,nd,sa,sb,sc;
int a[N],b[N],c[N],d[N],ans; int Presist()
{
freopen("eat.in","r",stdin);
freopen("eat.out","w",stdout);
read(n),read(na),read(nb),read(nc),read(nd);
for(int i=; i<=na; ++i) read(a[i]); std::sort(a+,a+na+);
for(int i=; i<=nb; ++i) read(b[i]); std::sort(b+,b+nb+);
for(int i=; i<=nc; ++i) read(c[i]); std::sort(c+,c+nc+);
for(int i=; i<=nd; ++i) read(d[i]); std::sort(d+,d+nd+);
for(int i=; i<=na; ++i)
{
sa=a[i]; if(sa>n) break;
for(int j=; j<=nb; ++j)
{
sb=sa+b[j]; if(sb>n) break;
for(int p=; p<=nc; ++p)
{
sc=sb+c[p]; if(sc>n) break;
for(int q=; q<=nd; ++q)
{
if(sc+d[q]>n) break;
else ans++;
}
}
}
}
printf("%d\n",ans);
return ;
} int Aptal=Presist();
int main(int argc,char**){;}
30分 暴力
sum记录C D 每种时间出现的次数,枚举 i,j 判断 n-a[i]-b[j] 的次数
#include <algorithm>
#include <cstdio> #define LL long long #define max(a,b) (a>b?a:b)
#define min(a,b) (a<b?a:b) inline void read(LL &x)
{
x=; register char ch=getchar();
for(; ch>''||ch<''; ) ch=getchar();
for(; ch>=''&&ch<=''; ch=getchar()) x=x*+ch-'';
}
const int N();
LL n,food[][N],f[][N],ans;
int sum[];
bool flag; inline void violence_30() //50^4,暴力判断 30分
{
for(int i=; i<=food[][]; ++i)
for(int j=; j<=food[][]; ++j)
for(int p=; p<=food[][]; ++p)
for(int q=; q<=food[][]; ++q)
ans+=(food[][i]+food[][j]+food[][p]+food[][q]<=n);
}
inline void violence_another_30() // 分组背包 n*(A\B\C\D)枚举
{
for(int i=; i<=n; ++i) f[][i]=;
for(int k=; k<; ++k)
for(int i=; i<=n; ++i)
for(int j=; j<=food[k][]; ++j)
if(i>=food[k][j]) f[k][i]+=f[k-][i-food[k][j]];
ans=f[][n];
}
inline void no_wa_and_all_ac()
{
LL minn=2e8+,maxx=-;
for(int i=; i<=food[][]; ++i)
for(int j=; j<=food[][]; ++j)
{
sum[food[][i]+food[][j]]++;
minn=min(minn,food[][i]+food[][j]);
maxx=max(maxx,food[][i]+food[][j]);
}
for(int i=minn; i<=maxx; ++i) sum[i]+=sum[i-];
for(int i=; i<=food[][]; ++i)
for(int j=; j<=food[][]; ++j)
if(n-food[][i]-food[][j]>=)
ans+=sum[ min(maxx,n-food[][i]-food[][j]) ];
} int Presist()
{
freopen("eat.in","r",stdin);
freopen("eat.out","w",stdout);
read(n); for(int i=; i<; ++i) read(food[i][]);
for(int i=; i<; ++i)
for(int j=; j<=food[i][]; ++j)
read(food[i][j]);
for(int i=; i<; ++i)
if(food[i][]>) flag=;
if(n<=) violence_another_30();
else if(!flag) violence_30();
else no_wa_and_all_ac();
printf("%I64d",ans);
return ;
} int Aptal=Presist();
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。
#include <cstdio> #define LL long long
inline void read(LL &x)
{
x=; register char ch=getchar();
for(; ch>''||ch<''; ) ch=getchar();
for(; ch>=''&&ch<=''; ch=getchar()) x=x*+ch-'';
}
LL n,k,ans; inline bool if_cant(LL x)
{
for(; x; x/=)
if(x%==) return ;
return ;
} int Presist()
{
freopen("candy.in","r",stdin);
freopen("candy.out","w",stdout); read(n),read(k);
for(LL t,i=k; i<=n; ++i)
{
if(if_cant(i)) continue;
for(LL j=k; j<=n-i; ++j)
{
if(if_cant(j)) continue;
t=n-i-j;
ans+=(t>=k&&(!if_cant(t)));
}
}
printf("%I64d\n",ans);
return ;
} int Aptal=Presist();
int main(int argc,char**){;}
50分暴力
数位DP
#include<cstdio>
#include<cstring> #define N 10003 using namespace std; const int mod=; char s[N];
int a[N],b[N],dp[N][][][][]; void ADD(int &i,int j) { i+=j; if(i>=mod) i-=mod; } int main()
{
freopen("candy.in","r",stdin);
freopen("candy.out","w",stdout);
scanf("%s",s+); int len1=strlen(s+);
for(int i=;i<=len1;++i) a[i]=s[i]-'';
scanf("%s",s+); int len2=strlen(s+);
for(int i=;i<=len2;++i) b[i+len1-len2]=s[i]-'';
dp[][][][][]=;
int i,j,k,l,t,I,J,K,L,T;
for(i=;i<len1;i++)
for(j=;j<;j++)
for(k=;k<;k++)
for(l=;l<;l++)
for(t=;t<;t++)
if(dp[i][j][k][l][t])
for(int s1=;s1<=;s1++)
if(s1!=)
for(int s2=;s2<=;s2++)
if(s2!=)
for(int s3=;s3<=;s3++)
if(s3!=)
{
I=i+;
J=j*+a[i+]-s1-s2-s3;
if(J< || J>) continue;
if(!k && s1<b[i+]) continue;
K=(k || s1>b[i+]);
if(!l && s2<b[i+]) continue;
L=(l || s2>b[i+]);
if(!t && s3<b[i+]) continue;
T=(t || s3>b[i+]);
ADD(dp[I][J][K][L][T],dp[i][j][k][l][t]);
}
int ans=;
for(k=;k<;k++)
for(l=;l<;l++)
for(t=;t<;t++)
ADD(ans,dp[len1][][k][l][t]);
printf("%d",ans);
}
AC
2017-10-02-afternoon的更多相关文章
- phpStudy + JspStudy 2014.10.02 下载
phpStudy + JspStudy 2014.10.02 下载 目标:让天下没有难配的php环境. phpStudy Linux版&Win版同步上线 支持Apache/Nginx/Teng ...
- 九月 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 ...
- 2017/10 冲刺NOIP集训记录:暁の水平线に胜利を刻むのです!
前几次集训都没有记录每天的点滴……感觉缺失了很多反思的机会. 这次就从今天开始吧!不能懈怠,稳步前进! 2017/10/1 今天上午进行了集训的第一次考试…… 但是这次考试似乎是近几次我考得最渣的一次 ...
- Adobe Audition CC 2017 (10.0)安装教程
Adobe Audition CC 2017 (10.0)安装教程 注:下载地址在文章末尾 第一步:首先请将电脑的网络断开,很简单:禁用本地连接或者拔掉网线,这样就可以免除登录Creative Clo ...
- Xamarin 2017.10.9更新
Xamarin 2017.10.9更新 本次更新主要解决了一些bug.Visual Studio 2017升级到15.4获得新功能.Visual Studio 2015需要工具-选项-Xamarin ...
- 2017.10.12 Java的计数器的开发
//我们用一个合成的applet/application来简单显示出一个计数器的结果/** * Created by qichunlin on 2017/10/12. */ /*简单的计数器*/ im ...
- 2017.10.10 java中的继承与多态(重载与重写的区别)
1. 类的继承 继承是面向对象编程技术的主要特征之一,也是实现软件复用的重要手段,使用继承特性子类(subclass) 可以继承父类(superclass)中private方法和属性,继承的目的是使程 ...
- 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 ...
- 2017.10.31 Enginer+position+statement
一.The basic information Post name Engineering manager Department Engineering Post member A24645 imme ...
- 2017.10.23 Java 面向对象深入学习---final 关键字、static关键字、匿名对象等
今日内容介绍 1.final 关键字 2.static 关键字 3.匿名对象 4.内部类 5.包的声明与访问 6.访问修饰符 7.代码块 第一节课 01(面向对象)final关键字概念.avi 02: ...
随机推荐
- 使用VirtualBox的时候虚拟机无法ping通windows主机,但是主机可以ping通虚拟机
问题原因是windows开启了防火墙导致的,将windows的防火墙关闭即可. 关闭windows防火墙后会有警告的信息出现,直接无视即可.
- Matlab中size、numel、length、fix函数的使用
size():获取矩阵的行数和列数 (1)s=size(A), 当只有一个输出参数时,返回一个行向量,该行向量的第一个元素时矩阵的行数,第二个元素是矩阵的列数. (2)[r,c]=size ...
- 前端phtooshop基础
1.图片理论基础 2.使用Adobe FireWorks切图和S0VG的处理 可以单独生成一个图片的切图 选择多个切图部分生成CSS Sprite,甚至CSS和html都生成了对应的文件. 3.Ph ...
- 迅为7寸工业触摸屏嵌入式平台可用于ARM嵌入式一体机
7寸触摸屏介绍产品名称:7寸IPS高清屏幕分辨率:1280*800触摸屏类型:电容屏(五点触摸)接线方式: FPC 可应用于嵌入式一体机.自动售货机.广告机.智能自动终端.零售终端等 ARM平台处理器 ...
- Eureka 整理
服务治理:(该模块也可以使用集群) 该模块主要负责完成微服务架构中的服务治理功能. 1.构建服务注册中心. 每个服务单元需要向注册中心登记自己提供的服务. 2.服务注册与服务发现. 服务之间的调用不再 ...
- 修改phpadmin中的默认超时时间
登录后1440秒未活动后总是自动退出,一天还要登录多次,终于有时间来解决这个问题了,感觉是session超时,结果在网上search了下,找到解决办法啦,哈哈哈,在此做个笔记: phpmyadmin在 ...
- java_udp编程
两个重要的类: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/net/DatagramPacket.html ht ...
- 笔试算法题(23):数值整数次方 & 最大对称子串
出题:数值的整数次方(不考虑溢出),实现函数double Power(double base, int exponent): 分析: 解法1:最简单的方法是使用直接的乘法运算,但是注意处理几种特殊情况 ...
- 笔试算法题(15):-1到N中包含1的数字的个数 & 连续和为N的序列
出题:输入一个整数N,求从1到N这N个整数的十进制表示中‘1’出现的次数: 分析: 从左向右处理string表示的数字:当前数字长度为n,判断最左边一位数字字符: 如果是0,则直接递归下一位: 如果是 ...
- C++中const与constexpr区别
对于对象来说 const指的是编译期常量和运行时常量,两者并没有区分 constexpr特指编译期常量 对于函数来说 const可以修饰类的成员函数,被修饰的函数在执行期间不会改变对象的值. clas ...