10.1综合强化刷题 Day2 afternoon
最大值(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>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define N 100010
#define LL long long
using namespace std;
int n,k,x,y;
long long q,sum[N];
int read()
{
,f=;char ch=getchar();
;ch=getchar();}
+ch-',ch=getchar();
return x*f;
}
int main()
{
freopen("max.in","r",stdin);
freopen("max.out","w",stdout);
n=read(),k=read();
;i<=n;i++) x=read(),sum[i]=sum[i-]+(LL)x;
for(int i=k;i<=n;i++)
if(q<sum[i]-sum[i-k])
{
) x=y;
y=i-k+,q=sum[i]-sum[i-k];
}
printf("%d %d",x,y);
;
}
20分、、、、(代码出了点小问题)
这个题说白了就是让着找最大的k个数的前缀和的位置跟次大的k个数的前缀和的位置,在找这个次大的位置的时候,一定不要忘记x+k<y即我们设最大的数的位置为x,现在我们找到的位置为i,那么这两个位置一定要满足:abs(x-i)>=k,注意我们这个地方找的是次大的,一定不要在找的时候找了两遍最大的
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define N 100010
#define LL long long
using namespace std;
int n,k,x,y,a[N];
long long q,sum[N];
int read()
{
,f=; char ch=getchar();
;ch=getchar();}
+ch-',ch=getchar();
return x*f;
}
int main()
{
freopen("max.in","r",stdin);
freopen("max.out","w",stdout);
n=read(),k=read();
;i<=n;i++)
{
a[i]=read();
]+(LL)a[i];
]+(LL)a[i]-(LL)a[i-k];
}
for(int i=k;i<=n;i++)
if(q<sum[i]) q=sum[i],x=i;
q=;
for(int i=k;i<=n;i++)
if(i!=x&&q<sum[i]&&abs(i-x)>=k)
q=sum[i],y=i;
if(x>y) swap(x,y);
x=x-k+,y=y-k+;
printf("%d %d",x,y);
;
}
AC代码
吃东西(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<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define N 10000
using namespace std;
],q[][N];
int read()
{
,f=; char ch=getchar();
;ch=getchar();}
+ch-',ch=getchar();
return x*f;
}
void dfs(int s,int t)
{
) return ;
+)
{
ans++;
return ;
}
;i<=sum[s];i++)
dfs(s+,t-q[s][i]);
}
int main()
{
freopen("eat.in","r",stdin);
freopen("eat.out","w",stdout);
t=read();
;i<=;i++) sum[i]=read();
;i<=;i++)
;j<=sum[i];j++)
q[i][j]=read();
dfs(,t);
printf("%d",ans);
;
}
30分的暴力搜索
我们将4家店分成两部分,第一部分为只在A和B吃一样东西耗费的时间,另一部分为在C和D吃一样东西耗费的时间,然后我们先预处理出第一部分耗费的时间来,然后求一个前缀和(为什么要求前缀和??因为我们最终耗费的时间是在n以内,也就是小于等于n的方案数,如果不计前缀和当前的恰好为正好耗费这个时间的方案数,而这个数组前面的恰好为小于这个时间的方案数,所以我们要处理一个前缀和),然后我们再来枚举吃C和D的哪个美食,然后在累加这种情况下加上A和B以后有多少中情况满足条件,最后输出答案
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 5010
#define LL long long
using namespace std;
long long ans;
];
int read()
{
,f=; char ch=getchar();
;ch=getchar();}
+ch-',ch=getchar();
return x*f;
}
int main()
{
freopen("eat.in","r",stdin);
freopen("eat.out","w",stdout);
;
n=read(),A=read(),B=read(),C=read(),D=read();
;i<=A;i++) a[i]=read();
;i<=B;i++) b[i]=read();
;i<=C;i++) c[i]=read();
;i<=D;i++) d[i]=read();
;i<=A;i++)
;j<=B;j++)
{
sum[a[i]+b[j]]++;
minn=min(a[i]+b[j],minn);
maxn=max(a[i]+b[j],maxn);
}
];
;i<=C;i++)
;j<=D;j++)
if(n-c[i]-d[j]>=minn) ans+=(LL)sum[min(n-c[i]-d[j],maxn)];
printf("%I64d",ans);
;
}
AC代码
发现原来这种可以分成好几部分来做的题可以先分成好几部分与处理一下在做
分糖果(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。
/*
一共三个数组成n,我们枚举前两个数,第三个数就可以直接算出来,然后判断这三个数是否满足条件,如果满足条件,ans++
我们用一个pd函数判断这个数是否满足条件,满足条件的情况为每一位上都不含有3
*/
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define LL long long
using namespace std;
LL n,k,ans;
LL read()
{
LL x=,f=; char ch=getchar();
;ch=getchar();}
+ch-',ch=getchar();
return x*f;
}
bool pd(LL x)
{
while(x)
{
==) return true;
x/=;
}
return false;
}
int main()
{
freopen("candy.in","r",stdin);
freopen("candy.out","w",stdout);
n=read(),k=read();
for(int i=k;i<=n-k;i++)
{
if(pd(i)) continue;
for(int j=k;j+i<=n-k;j++)
if(pd(j)||pd(n-i-j)) continue;
else ans++;
}
printf("%lld",ans);
;
}
50分的枚举
正解:数位dp(本人暂时不想搞dp(主要是脑子笨想不出状态转移来),一段时间后在改吧)
#include<cstdio>
#include<cstring>
#define N 10003
using namespace std;
;
char s[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(); );
;i<=len1;++i) a[i]=s[i]-';
scanf(); );
;i<=len2;++i) b[i+len1-len2]=s[i]-';
dp[][][][][]=;
int i,j,k,l,t,I,J,K,L,T;
;i<len1;i++)
;j<;j++)
;k<;k++)
;l<;l++)
;t<;t++)
if(dp[i][j][k][l][t])
;s1<=;s1++)
)
;s2<=;s2++)
)
;s3<=;s3++)
)
{
I=i+;
J=j*+a[i+]-s1-s2-s3;
|| J>) continue;
]) continue;
K=(k || s1>b[i+]);
]) continue;
L=(l || s2>b[i+]);
]) continue;
T=(t || s3>b[i+]);
ADD(dp[I][J][K][L][T],dp[i][j][k][l][t]);
}
;
;k<;k++)
;l<;l++)
;t<;t++)
ADD(ans,dp[len1][][k][l][t]);
printf("%d",ans);
}
正解
10.1综合强化刷题 Day2 afternoon的更多相关文章
- 10.1综合强化刷题 Day3 afternoon
竞赛时间:????年??月??日??:??-??:?? 题目名称 a b c 名称 a b c 输入 a.in b.in c.in 输出 a.out b.out c.out 每个测试点时限 1s 1s ...
- 10.1综合强化刷题 Day2 morning
一道图论神题(god) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图,只有 ...
- 10.1综合强化刷题 Day1 afternoon
一道图论好题(graph) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图, ...
- 10.1综合强化刷题 Day2
a[问题描述]你是能看到第一题的 friends呢. —— hja世界上没有什么比卖的这 贵弹丸三还令人绝 ...
- 10.1综合强化刷题 Day3 morning
竞赛时间:????年??月??日??:??-??:?? 题目名称 a b c 名称 a b c 输入 a.in b.in c.in 输出 a.out b.out c.out 每个测试点时限 1s 1s ...
- 10.1综合强化刷题 Day7
noip提高组模拟赛 ...
- 10.1综合强化刷题 Day6
T1 排序 题目描述 小Z 有一个数字序列a1; a2; .... ; an,长度为n,小Z 只有一个操作:选 定p(1<p<n),然后把ap 从序列中拿出,然后再插⼊到序列中任意位置. ...
- 10.1综合强化刷题 Day5
T1 拼不出的数 lost.in/.out/.cpp[问题描述]3 个元素的集合{5; 1; 2}的所有子集的和分别是0; 1; 2; 3; 5; 6; 7; 8.发现最小的不能由该集合子集拼出的数字 ...
- 10.1综合强化刷题 Day4
财富(treasure) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK有n个小伙伴.每个小伙伴有一个身高hi. 这个游戏是这样的,LYK生活的环境是以 ...
随机推荐
- Winform VS2015打包
首先 ,我们要去官网http://learn.flexerasoftware.com/content/IS-EVAL-InstallShield-Limited-Edition-Visual-Stud ...
- ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT 的解决办法
今天接着写一个单片机程序,出现这个问题,我仔细查看每一句语句,发现逻辑上没有错误,但就是出现这个问题,不能生成目标文件: *** ERROR L107: ADDRESS SPACE OVERFLOW ...
- Windows下如何用CMD命令跳转到指定的目录下
以Window7为例说明,想要跳转到I:\adt-bundle-windows-x86-20130219\sdk\platform-tools目录下. 1.在运行中打开CMD命令窗口如下图所示: 2. ...
- java对象转json格式
package com; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import jav ...
- vue-cli 中引入 jq
vue-cli webpack 引入jquery 今天费了一下午的劲,终于在vue-cli 生成的工程中引入了jquery,记录一下.(模板用的webpack) 首先在package.json里的 ...
- netcfg.exe
netcfg.exe 编辑 本词条缺少信息栏.名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 目录 1 简介 2 可能出现问题 简介编辑 netcfg.exe是Kaspersky的 ...
- python学习-- Django Ajax CSRF 认证
使用 jQuery 的 ajax 或者 post 之前 加入这个 js 代码:http://www.ziqiangxuetang.com/media/django/csrf.js /*======== ...
- kickstart配置文件详解和system-config-kickstart
kickstart是什么 许多系统管理员宁愿使用自动化的安装方法来安装红帽企业 Linux.为了满足这种需要,红帽创建了kickstart安装方法.使用kickstart,系统管理员可 ...
- TOJ 4689: Sawtooth
4689: Sawtooth Time Limit(Common/Java):1000MS/3000MS Memory Limit:65536KByteTotal Submit: 26 ...
- xshell 连接redis
当我们安装好redis 在本地测试启动,存,取都正常,但是无法远程连接redis. 在redis.conf的文件默认配置中有一配置是 bind 127.0.0.1,表示绑定访问该redis的地址只能是 ...