人生的大起大落莫过如此,下一场我一定要回紫。


【A】Points on the line

题意:

一个直线上有\(n\)个点,要求去掉最少的点,使得最远两点距离不超过\(d\)。

题解:

暴力两重for,更新答案。

#include<cstdio>
#include<algorithm>
using namespace std;
#define F(i,a,b) for(int i=(a);i<=(b);++i)
int n,q,ans=0;
int a[100001];
int main(){scanf("%d%d",&n,&q);F(i,1,n) scanf("%d",a+i);sort(a+1,a+n+1);F(i,1,n){int xx=a[i], kk=-1;F(j,i,n){if(a[j]-xx>q) break;kk=j;}ans=max(ans,kk-i+1);}printf("%d",n-ans);return 0;
}

【B】Our Tanya is Crying Out Loud

题意:

一个数\(n\),每次你可以花费\(A\)的代价把它除以\(k\)(如果\(k|n\)),或者花费\(B\)的代价把它减一。问把这个数变成1的最少代价。

题解:

暴力上,不能除减到能除为止,能除看是除了花费少还是不除花费少。

注意特判\(k=1\)。

#include<cstdio>
#define ll long long
int n,k,A,B;
ll ans;
int main(){scanf("%d%d%d%d",&n,&k,&A,&B);if(k==1) {printf("%lld",(ll)(n-1)*A);return 0;}while(n!=1){int x=n/k*k;if(x==0) {ans+=(ll)(n-1)*A; break;}if(n!=x) ans+=(ll)(n-x)*A, n=x;else{x=n/k;if((ll)(n-x)*A<=B) ans+=(ll)(n-x)*A;else ans+=B;n=x;}}printf("%lld",ans);return 0;
}

【C】Phone Numbers

题意:

限定字符集,求长度为\(k\)的,字典序比给定长度为\(n\)的字符串大的最小的字符串。

题解:

①\(k>n\)时,在原串后补上最小的字符。

②\(k<=n\)时,答案为原串的前\(k\)位+1,即比原串\(k\)位前缀大的第一个字符串。

#include<cstdio>
#define F(i,a,b) for(int i=(a);i<=(b);++i)
#define F2(i,a,b) for(int i=(a);i<(b);++i)
int n,k,tot;
int px[150];
bool used[150];
char str[100010],use[30];
char ans[100010];
int main(){scanf("%d%d",&n,&k);scanf("%s",str);F2(i,0,n) used[str[i]]=1;F(i,1,140) if(used[i]) use[++tot]=i;F(i,1,tot) px[use[i]]=i; if(k>n){printf("%s",str);F(i,n+1,k) printf("%c",use[1]);return 0;}F2(i,0,k) ans[i]=str[i]; ans[k]='\0';int x=k-1;while(px[ans[x]]==tot){ans[x]=use[1];--x;}ans[x]=use[px[ans[x]]+1];printf("%s",ans);return 0;
}

【D】Alena And The Heater

题意:

已知长度为\(n\)的数组\(a\)和等长的01串\(b\),和通过\(a\)生成\(b\)的方法:

\(b_1=b_2=b_3=b_4=0\)

对于\(5\le i\le n\)

如果\(a_i,a_{i-1},a_{i-2},a_{i-3},a_{i-4}>r\) 并且\(b_{i-1}=b_{i-2}=b_{i-3}=b_{i-4}=1\),那么\(b_i=0\)

如果\(a_i,a_{i-1},a_{i-2},a_{i-3},a_{i-4}<l\) 并且\(b_{i-1}=b_{i-2}=b_{i-3}=b_{i-4}=0\),那么\(b_i=1\)

如果以上两者均不满足,那么\(b_i=b_{i-1}\)。

试求出\(l,r\)的值。

题解:

可以看到,对计算有贡献的只有\(b\)中出现连续的4个相同数字的情况。

通过这些情况,我们可以确定\(l,r\)的范围,进而求出\(l,r\)的可能值。

因为题目保证有解,只需输出最极端的值(\(l_{min},r_{max}\))即可。

#include<cstdio>
#include<algorithm>
using namespace std;
#define F(i,a,b) for(int i=(a);i<=(b);++i)
int n,ansll=-1000000000,ansrr=1000000000;
int a[100001];
char b[100009];
int main(){scanf("%d",&n);F(i,1,n) scanf("%d",a+i);scanf("%s",b+1);F(i,5,n){if(b[i-4]==b[i-3]&&b[i-3]==b[i-2]&&b[i-2]==b[i-1]){if(b[i-1]=='0'){int x=max(max(max(max(a[i],a[i-1]),a[i-2]),a[i-3]),a[i-4]);if(b[i]=='1'){//l > max(a 1~5)ansll=max(ansll,x+1);}}else{int x=min(min(min(min(a[i],a[i-1]),a[i-2]),a[i-3]),a[i-4]);if(b[i]=='0'){//r < min(a 1~5)ansrr=min(ansrr,x-1);}}}}printf("%d %d",ansll,ansrr);return 0;
}

【E】Cashback

题意:

给定一个长度为\(n\)的数组\(a\)和一个常数\(c\)。你可以把\(a\)数组分割成连续的若干段,每一段的代价分别计算:

对于长度为\(len\)的一段,其代价为其元素总和,减去最小的\(\left \lfloor \frac{len}{c} \right \rfloor\)个元素。

求最小总代价。

题解:

既然要让代价最小,我们转化为求最大的价值,再用所有的元素和减去这个价值即可。

那就变成了长度为\(len\)的一段,其价值为最小的\(\left \lfloor \frac{len}{c} \right \rfloor\)个元素的和。

首先我们注意到一个结论:有贡献价值的分段,其长度正好为\(c\)时,没有其他方法比它更优。

证明请自行脑补……因为我也没想清楚,当时考场上瞎猜的结论,有兴趣的读者不妨看看http://www.cnblogs.com/kkkkahlua/p/8468896.html。

那么,我们通过单调队列处理出每个长为\(c\)的区间的最小值,记为\(b\)数组。

那么有DP方程\(f[i]=(max_{j=1}^{i-c}f[i])+b[i-c+1]\),表示前\(i\)个数,最后一个区间必须选取的最大价值,答案为\(Sum-max(f[i])\)。

#include<cstdio>
#include<algorithm>
using namespace std;
#define F(i,a,b) for(int i=(a);i<=(b);++i)
#define ll long long
int n,c;
int a[100009],b[100009];
int que[100009],l=1,r=0;
ll sum,f[100009],g[100009];
int main(){scanf("%d%d",&n,&c);F(i,1,n) scanf("%d",a+i);F(i,1,n) sum+=a[i];if(c>n) {printf("%lld",sum); return 0;}F(i,1,c){while(l<=r&&a[que[r]]>=a[i]) --r;que[++r]=i;} b[1]=a[que[l]];F(i,c+1,n){if(que[l]<=i-c) ++l;while(l<=r&&a[que[r]]>=a[i]) --r;que[++r]=i;b[i-c+1]=a[que[l]];}F(i,1,n-c+1){if(i<=c) f[i]=b[i];else{f[i]=b[i]+g[i-c];}g[i]=max(g[i-1],f[i]);}printf("%lld",sum-g[n-c+1]);return 0;
}

转载于:https://www.cnblogs.com/PinkRabbit/p/8469943.html

【codeforces】【比赛题解】#940 CF Round #466 (Div. 2)相关推荐

  1. Codeforces Round #466 (Div. 2)

    http://codeforces.com/contest/940 A水题 //#pragma comment(linker, "/stack:200000000") //#pra ...

  2. Codeforces Round #466 (Div. 2): E. Cashback(单调队列+DP)

    题目链接:http://codeforces.com/contest/940/problem/E 题意:给你一个长为n的序列和一个数字c,你要将这个序列切成若干段,对于每一段,这段中最小的[n/c]个 ...

  3. 【codeforces】【比赛题解】#960 CF Round #474 (Div. 1 + Div. 2, combined)

    终于打了一场CF,不知道为什么我会去打00:05的CF比赛-- 不管怎么样,这次打的很好!拿到了Div. 2选手中的第一名,成功上紫! 以后还要再接再厉! [A]Check the string 题意 ...

  4. 【codeforces】【比赛题解】#849 CF Round #431 (Div.2)

    cf的比赛越来越有难度了--至少我做起来是这样. 先看看题目吧:点我. 这次比赛是北京时间21:35开始的,算是比较良心. [A]奇数与结束 "奇数从哪里开始,又在哪里结束?梦想从何处起航, ...

  5. 【codeforces】【比赛题解】#937 CF Round #467 (Div. 2)

    没有参加,但是之后几天打了哦,第三场AK的CF比赛. CF大扫荡计划正在稳步进行. [A]Olympiad 题意: 给\(n\)个人颁奖,要满足: 至少有一个人拿奖. 如果得分为\(x\)的有奖,那么 ...

  6. 【codeforces】【比赛题解】#950 CF Round #469 (Div. 2)

    剧毒比赛,至少涨了分对吧.: ( [A]Left-handers, Right-handers and Ambidexters 题意: 有\(l\)个右撇子,\(r\)个左撇子,\(a\)个双手都惯用 ...

  7. 【codeforces】【比赛题解】#851 CF Round #432 (Div.2)

    cf真的难-- 点我浏览丧题. [A]Arpa和她对墨西哥人浪的研究 Arpa正在对墨西哥人浪进行研究. 有n个人站成一排,从1到n编号,他们从时刻0开始墨西哥人浪. 在时刻1,第一个人站起来. 在时 ...

  8. 【codeforces】【比赛题解】#862 CF Round #435 (Div.2)

    这次比赛打得很舒服,莫名得了个Rank41,涨了219的Rating,就比较优秀.不过还是没有闫神厉害啊. 题目链接::P. [A]MEX 题意: Evil博士把Mahmoud和Ehab绑架到了邪恶之 ...

  9. 【codeforces】【比赛题解】#872 CF Round #440 (Div.2)

    链接. [A]寻找漂亮数字 题意: 给定了两列非零数字. 我们说一个数是漂亮的,当它的十进制表达中有至少一个数从数列一中取出,至少有一个数从数列二中取出. 最小的漂亮数字是多少? 输入: 第一行两个数 ...

最新文章

  1. c++经典代码大全_宁海檩条C型钢型号大全
  2. java课程设计总结与思考,你掌握了多少?
  3. MySQL有关Group By的优化
  4. 5.什么是二叉查找树?原理
  5. 文巾解题 567. 字符串的排列
  6. centos 6.5网卡dhcp不能获得网关
  7. 最小二乘估计_相关性及最小二乘估计【20201026】
  8. TensorFlow构建二维数据拟合模型(2)
  9. 盘点一下结构体标签在Go中的应用
  10. c++分治法求最大最小值实现_你所不了解的分治算法
  11. JavaScript随机数的应用
  12. xcode9 免证书调试
  13. 利用STM32F103精确控制步进电机
  14. linux终端字符串转字符画
  15. 在iOS开发中使用自定义字体
  16. 《计算机工程》投稿过程
  17. 使用 Amazon WAF 进行 Captcha 人机验证
  18. APICloud和海马玩模拟器结合调试手机页面
  19. 服务器美国视频网站吗,美国服务器可以做视频网站吗
  20. NYOJ-110-剑客决斗

热门文章

  1. UITabBarController+UINavigationController+UIToolBar
  2. jmeter 监听的介绍
  3. LeetCode - Minimum Window Substring
  4. Minimum Depth of Binary Tree
  5. 随笔--2011.12.21
  6. Microsoft Visual Studio Learning Pack 自动生成流程图插件(转)
  7. eclipse 插件开发过程中遇到的一堆问题(急待解决)
  8. OpenStack Neutron浅析(一)
  9. java字符串编程_java字符串抉择
  10. 8 list切片_P018 python基础:数据类型之列表切片02