2018.8.17提高B组模拟考试
今天,是一个重要的日子。
(想什么呢?我说的当然是那位大人的生日啦)
T1 题意简述:jzoj3223
Description
Input
Output
Data Constraint
解题思路:出题人居然已经懒到用河北2013年的省选题当考题了...
而且重点是还把HEOI打成HBOI(湖北OI)了...
这道题怎么做不用我多说了吧。
正反各做一遍背包,二进制拆分优化即可。
#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<algorithm> using namespace std; int n,k,ans,mon[1001],wei[1001],tim[1001]; int dp1[1001][1001],dp2[1001][1001]; int main() {scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d%d%d",&mon[i],&wei[i],&tim[i]);for(int i=1;i<=n;i++){int lim=tim[i];for(int j=0;j<=1000;j++)dp1[i][j]=dp1[i-1][j];for(int j=1;lim;j=min(j<<1,lim)){for(int l=1000;l>=j*mon[i];l--)dp1[i][l]=max(dp1[i][l],dp1[i][l-j*mon[i]]+j*wei[i]);lim-=j;}}for(int i=n;i>=1;i--){int lim=tim[i];for(int j=1;j<=1000;j++)dp2[i][j]=dp2[i+1][j];for(int j=1;lim;j=min(j<<1,lim)){for(int l=1000;l>=j*mon[i];l--)dp2[i][l]=max(dp2[i][l],dp2[i][l-j*mon[i]]+j*wei[i]);lim-=j;}}scanf("%d",&k);for(int i=1;i<=k;i++){int u,v;scanf("%d%d",&u,&v);u++;ans=0;for(int j=0;j<=v;j++)ans=max(ans,dp1[u-1][j]+dp2[u+1][v-j]);printf("%d\n",ans);}return 0; }
T2 题意简述:jzoj100029
Description
Input
Output
Data Constraint
对于 50%的测试数据n ≤ 100
对于 100%的测试数据? ≤ 100000, ?, ? ≤ 1000000
解题思路:思路有点绕的贪心。
首先挑出所有可能成为陪审团成员之一的人。
对Y最优的情况:yk最大的t个人都在备选行列内。
此时Y可以挑这t个yk最大的人。
对Y最劣的情况:yk最大的n-s个人都不在备选行列内。
此时Y只能挑yk排名从n-s+1到n-s+t这t个人。
因此yk值排名前n-s+t个人都有可能成为陪审团成员之一。
在第一次排序中若yk值相同,则按xk值从小到大排列。
因为Y的策略是保证yk值最大的前提下使xk值最小,因此若最后几个人yk值都相同,Y会挑xk
值小的,而xk值大的并没有被挑走的可能。
然后把这n-s+t个人按xk从大到小排序,我们要让排名前t个人成为陪审团。
让他们成为陪审团有一定条件:
备选队列里的其他人yk值必须严格小于陪审团成员yk值的最小值。
为什么不能等于?因为若yk值相等,Y就会挑xk值小的。除非xk,yk这两个值均相同,否则
陪审团总xk值就会变小。
为了让Y排除掉的那s-t个人yk值尽量大,我们需要让陪审团成员yk值尽量大。
因此第二次排序时若xk值相同,就按yk值从大到小排列。
接下来要从剩下的n-t个人中挑选那s-t个人。
因为要使Y排除掉的那s-t个人yk值尽量大,因此我们按yk值从大到小排序。
同时我们还要使备选成员的xk值总和尽量大,因此yk值相同时按xk值从大到小排列。
选出前s-t个人即可。
#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<algorithm> #define INF 0x3f3f3f3f #define ll long long using namespace std; ll n,s,t,cnt,ansx,ansy; struct uio{ll vx,vy; }peo[100001],peo1[100001]; bool cmp1(uio x,uio y) {if(x.vy==y.vy) return x.vx<y.vx;return x.vy>y.vy; } bool cmp2(uio x,uio y) {if(x.vx==y.vx) return x.vy>y.vy;return x.vx>y.vx; } bool cmp3(uio x,uio y) {if(x.vy==y.vy) return x.vx>y.vx;return x.vy>y.vy; } int main() {scanf("%lld%lld%lld",&n,&s,&t);for(ll i=1;i<=n;i++)scanf("%lld%lld",&peo[i].vx,&peo[i].vy);sort(peo+1,peo+1+n,cmp1);sort(peo+1,peo+1+n-s+t,cmp2);ll mnx=INF,mny=INF,mxx=-1,mxy=-1;for(ll i=1;i<=t;i++){ansx+=peo[i].vx,ansy+=peo[i].vy;mnx=min(mnx,peo[i].vx),mny=min(mny,peo[i].vy);mxx=max(mxx,peo[i].vx),mxy=max(mxy,peo[i].vy);}for(ll i=1;i<=n;i++)if(peo[i].vy<mny) peo1[++cnt]=peo[i];sort(peo1+1,peo1+1+cnt,cmp3);for(ll i=1;i<=s-t;i++)ansx+=peo1[i].vx,ansy+=peo1[i].vy;printf("%lld %lld\n",ansx,ansy);return 0; }
T3 题意简述:jzoj4676
Description
他正试图用一个模板串来重构这个字符串。
他可以将模板串复制多份,通过合适的方式拼接起来,使得最终的串与原串一致。
如果两个模板串互相覆盖,那么覆盖的部分必须完全一致。
原串的所有位置必须被覆盖到。
显然,原串本身就是一个模板串。但为了节省成本,他想找到长度最短的模板串。
Input
Output
Data Constraint
Subtask1[20pts]:N<=100
Subtask2[30pts]:N<=25000
Subtask3[50pts]:N<=500000
解题思路:一道KMP瞎搞的题,也可以用dp。这里介绍dp做法。
当然,字符串匹配的题要先把next数组求出来。
设dp[i]表示能完全覆盖前缀i的最短前缀的长度。
发现dp[i]最多只有2种取值:i或是dp[next[i]]。
因为能完全覆盖一个字符串a的字符串b必同时是a的前缀和后缀。
考虑何时dp[i]=dp[next[i]]。
显然,最后next[i]个字符是肯定要被一个长为next[i]的前缀覆盖的。
除去这next[i]个字符,前面的字符要用若干个前缀覆盖。
为保证完全覆盖,覆盖前i-next[i]个字符的最后一个前缀与覆盖从第i-next[i]+1个字符到
第i个字符的这个前缀必然是首尾相接或是有重合部分的。如下图所示:
因此只需在[i-next[i],i]区间内找有没有dp[j]=dp[next[i]]的。
有则dp[i]=dp[next[i]],否则dp[i]=i。
每次转移时都找一遍太慢了,只需开数组mx[i]记录dp[j]=i的最大的j即可。
#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<algorithm> using namespace std; int n,next[500001],dp[500001],mx[500001]; char s[500001]; void getnxt() {int num=0;for(int i=2;i<=n;i++){while(num&&s[num+1]!=s[i]) num=next[num];if(s[num+1]==s[i]) num++;next[i]=num;} } int main() {scanf("%s",s+1);n=strlen(s+1);getnxt();for(int i=1;i<=n;i++){if(mx[dp[next[i]]]>=i-next[i]) dp[i]=dp[next[i]];else dp[i]=i;mx[dp[i]]=i;}printf("%d\n",dp[n]);return 0; }
转载于:https://www.cnblogs.com/water-radish/p/9496385.html
2018.8.17提高B组模拟考试相关推荐
- 2018.8.16提高B组模拟考试
永远不要把时间交给一道打表题. T1 题意简述:jzoj4674 Description 科学家温斯顿定义了一个无限重复的数列:1234321234321234321--,并将其称为时钟序列. 他发现 ...
- JZOJ 5814. 【NOIP提高A组模拟2018.8.14】 树
梦游中的你来到了一棵 N 个节点的树上. 你一共做了 Q 个梦, 每个梦需要你从点 u 走到点 v 之后才能苏醒, 由于你正在梦游, 所以每到一个节点后,你会在它连出去的边中等概率地选择一条走过去, ...
- 5814. 【NOIP提高A组模拟2018.8.14】 树(期望 + 倍增)
5814. [NOIP提高A组模拟2018.8.14] 树 Problem 给定一棵nnn个点的树,m" role="presentation">mmm次询问,每次 ...
- JZOJ 5372. 【NOIP2017提高A组模拟9.17】猫
Description 信息组最近猫成灾了!隔壁物理组也拿猫没办法.信息组组长只好去请神刀手来帮他们消灭猫.信息组现在共有n 只猫(n 为正整数),编号为1 到n,站成了一个环,第i 只猫的左边是第i ...
- 特岗计算机考试题2018年,2020年特岗模拟考试试题及答案.pdf
2020 年特岗模拟考试试题及答案(精选) 一.单选题(共 100 题,每题 0.7 分,共 70 分) 1. 儿童在知道"苹果"."梨"等概念后,再学习&qu ...
- 5817. 【NOIP提高A组模拟2018.8.15】 抄代码
Description J 君是机房的红太阳,每次模拟她总是 AK 虐场.然而在 NOIP2117 中,居然出现了另一位 AK 的选手 C 君! 这引起了组委会的怀疑,组委会认为 C 君有抄袭 J 君 ...
- JZOJ 5820. 【NOIP提高A组模拟2018.8.16】 非法输入
Description 在算法竞赛中,题目一般保证了输入数据的合法性.然而在工程开发中,我们往往不期望程 序得到的输入都是合法的. D 君正忙着向校内 OJ 添加题目,在写了第 233 个 val.c ...
- 2018.07.17【省赛模拟】模拟B组 比赛总结
题目 [GDKOI2003]最大公共子串 [题目描述] 从一个给定的串中删去(不一定连续地删去)0个或0个以上的字符,剩下的字符按原来的顺序组成的串是该串的字串.例如:"", &q ...
- JZOJ 5371. 【NOIP2017提高A组模拟9.17】组合数问题
Description 定义"组合数"S(n,m)代表将n 个不同的元素拆分成m 个非空集合的方案数.举个例子,将{1,2,3}拆分成2 个集合有({1},{2,3}),({2},{1,3}),({3 ...
最新文章
- linux C++打包程序总结
- 【操作系统】进程间通信的五种方式
- [剑指offer]面试题8:旋转数组的最小数字
- GW48CK/PK2/PK/PK4 系统万能接插口与结构图信号/与芯片引脚对照表
- Redmi Note 11系列来势汹汹,一“机”打尽更多看不见的旗舰猛料
- C语言 socket
- Prototype使用$F()函数
- 学完这个PPT设计课程后,我实现了月入3w+!
- ubuntu18下查看opencv版本、多版本之间的共存,切换、下载地址
- python的拼音_Python之拼音拆分
- 使用迅雷9.1.48从ftp服务器下载文件
- 【MIT 6.0001 课程笔记】Problem Set 1
- php octet stream,php 上传excel时,excel mime-type类型为application/octet-stream,无法通过验证...
- vuecli项目打包
- 〖Python WEB 自动化测试实战篇⑧〗- 实战 - 利用 selenium 处理弹出框
- 【python逆向一把梭】pyinstaller打包的exe逆向一把梭
- “小小的世界大大的你”演讲全文,这是衡中的呐喊,这是我们每个人都该为自己呐喊,我们不甘平庸
- (转)私募基金机构设立、牌照申请、后续运营的最新政策规定和操作流程
- 三朝元老经验(转,推荐)
- Econometrics Homework (Lab Course: Chapters 2, 3, 4)
热门文章
- php 变成 25,2020-09-25 PHP变量介绍
- java多态 降低代码耦合性_深度分析:理解Java中的多态机制,一篇直接帮你掌握!...
- 数学建模题目及论文_三道适合作为试题的数学建模题目及其评分标准
- linux 32位redis安装,CentOS 5.5 32位上安装Redis 2.6报错解决
- python运维面试题_PYTHON运维开发面试题整理
- matlab在电气工程中的数值分析
- Matlab学习笔记——文件的打开与关闭
- 漫谈时序设计(3)走进时序约束的大门!
- 【Verilog HDL 训练】第 10 天(PWM 呼吸灯)
- P5147 随机数生成器 [数列]