Codeforces Round #409 (rated, Div. 2, based on VK Cup 2017 Round 2) 题解【ABCDE】
A. Vicious Keyboard
题意:给你一个字符串,里面只会包含VK,这两种字符,然后你可以改变一个字符,你要求VK这个字串出现的次数最多。
题解:数据范围很小,暴力枚举改变哪个字符,然后check就好。
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
cin>>s;
int ans = 0;
for(int i=0;i<s.size();i++){
if(s[i]=='V'){
s[i]='K';
}else
s[i]='V';
int tmp = 0;
for(int j=0;j<s.size()-1;j++){
if(s[j]=='V'&&s[j+1]=='K')
tmp++;
}
ans=max(ans,tmp);
if(s[i]=='V')
s[i]='K';
else
s[i]='V';
}
int tmp = 0;
for(int j=0;j<s.size()-1;j++){
if(s[j]=='V'&&s[j+1]=='K')
tmp++;
}
ans=max(ans,tmp);
cout<<ans<<endl;
}
B. Valued Keys
题意:定义f(x,y),表示选择字符串中字典序最小的那个字符,然后现在你需要构造一个b,满足f(a,b)=c
题解:如果c[i]>a[i],那么就显然非法,否则b[i]=c[i]即可。
#include<bits/stdc++.h>
using namespace std;
int main(){
string a,b,c;
cin>>a>>b;
for(int i=0;i<a.size();i++){
if(b[i]>a[i]){
cout<<"-1"<<endl;
return 0;
}else
c+=b[i];
}
cout<<c<<endl;
}
C. Voltage Keepsake
题意:你有个充电器,每秒钟可以充p的电。然后你有n个装置,每个装置每秒钟增加a[i],一开始有b[i]。请问最多多少秒,可以使得每一个装置都能运作下去。
题解:显然的二分答案,呈现单调性。然后我们贪心的去充电即可。注意二分的姿势应该是枚举二分的次数。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+7;
double a[maxn],b[maxn],p;
int n;
bool check(double x){
double las=x*p;
for(int i=0;i<n;i++){
if(b[i]+las<a[i]*x)return false;
if(b[i]>=a[i]*x)continue;
las-=(a[i]*x-b[i]);
}
return true;
}
int main(){
cin>>n>>p;
for(int i=0;i<n;i++)
cin>>a[i]>>b[i];
//cout<<check(2)<<endl;
double l = 0,r = 1e15;
for(int i=0;i<150;i++){
double mid = (l+r)/2.0;
if(check(mid))l=mid;
else r=mid;
//cout<<l<<" "<<r<<endl;
}
if(l>=1e14){
cout<<"-1"<<endl;
}else{
printf("%.10f\n",l);
}
}
D. Volatile Kite
题意:问你凸包上每个点最多移动多少,可以使得这个凸包仍然是一个凸包。
题解:答案就是p[i]这个点,离p[i-1],p[i+1]点的距离,最小值除以2。至于答案为什么这个,我就猜了一发结论,然后交一发就过了。。。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e3+6;
struct node{
double x,y;
}p[maxn];
int n;
double dis(node A,node B){
return sqrt((A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y));
}
double area(node A,node B,node C){
double l1 = dis(A,B);
double l2 = dis(B,C);
double l3 = dis(A,C);
double p = (l1+l2+l3)/2.0;
return sqrt(p*(p-l1)*(p-l2)*(p-l3));
}
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++){
cin>>p[i].x>>p[i].y;
}
double ans = 1e15;
for(int i=0;i<n;i++){
ans = min(ans,area(p[i],p[(i+1)%n],p[(i-1+n)%n])*2/dis(p[(i+1)%n],p[(i-1+n)%n]));
}
printf("%.12f\n",ans/2.0);
//cout<<ans/2<<endl;
}
C. Vulnerable Kerbals
题意:你需要构造一个最长的序列,满足以下要求:
1.前缀乘积在%m的情况下,应该都不一样。
2.规定的n个数,不能在前缀乘积中出现。
3.序列中的每个数都应该是[0,m)的。
题解:假设gcd(a,m)%gcd(b,m)==0,那么就显然会存在一个k,使得ak%m=b。那么这道题就按照gcd分类,然后用dp求一个最长路,然后再解同余方程,求解每一个k即可。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 2e5+7;
vector<int> P[maxn],E[maxn];
int n,m,vis[maxn],dp[maxn],from[maxn],phi[maxn];
int gcd(int a,int b){
if(b==0)return a;
return gcd(b,a%b);
}
long long qpow(long long a,long long b,long long c){
long long res = 1;
while(b){
if(b&1)res=res*a%c;
a=a*a%c;
b>>=1;
}
return res;
}
void pre(){
for(int i=1;i<maxn;i++){
phi[i]+=i-1;
for(int j=2*i;j<maxn;j+=i){
phi[j]-=phi[i];
}
}
}
int main(){
pre();
scanf("%d%d",&n,&m);
if(m==1){
cout<<"1\n0\n"<<endl;
return 0;
}
for(int i=1;i<=n;i++){
int x;scanf("%d",&x);
vis[x]=1;
}
for(int i=0;i<m;i++){
if(vis[i])continue;
P[gcd(i,m)].push_back(i);
}
int mx = 0;
for(int i=m;i>0;i--){
from[i]=-1;
for(int j=2*i;j<m;j+=i){
if(dp[j]>dp[i]){
dp[i]=dp[j];
from[i]=j;
}
}
dp[i]+=P[i].size();
if(dp[i]>dp[mx]){
mx=i;
}
}
if(vis[0]==0)dp[mx]++;
cout<<dp[mx]<<endl;
int last = 1;
while(mx!=-1){
for(int i=0;i<P[mx].size();i++){
int x = P[mx][i];
int g = gcd(last,x);
g = gcd(g,m);
cout<<(x/g)*qpow((last/g),phi[m/g]-1,m/g)%(m/g)<<" ";
last=x;
}
mx=from[mx];
}
if(vis[0]==0)cout<<"0";
cout<<endl;
}
Codeforces Round #409 (rated, Div. 2, based on VK Cup 2017 Round 2) 题解【ABCDE】的更多相关文章
- Codeforces Round #409 (rated, Div. 2, based on VK Cup 2017 Round 2)(A.思维题,B.思维题)
A. Vicious Keyboard time limit per test:2 seconds memory limit per test:256 megabytes input:standard ...
- Codeforces Round #409 (rated, Div. 2, based on VK Cup 2017 Round 2) D. Volatile Kite
地址:http://codeforces.com/contest/801/problem/D 题目: D. Volatile Kite time limit per test 2 seconds me ...
- Codeforces Round #409 (rated, Div. 2, based on VK Cup 2017 Round 2) C Voltage Keepsake
地址:http://codeforces.com/contest/801/problem/C 题目: C. Voltage Keepsake time limit per test 2 seconds ...
- Codeforces Round #409 (rated, Div. 2, based on VK Cup 2017 Round 2)
A 每次可以换一个或不换,暴力枚举位置即可 B 模拟 C 二分答案.. 边界可以优化r=totb/(tota-p),二分可以直接(r-l>=EPS,EPS不要太小,合适就好),也可以直接限定二分 ...
- Codeforces Round #409 (rated, Div. 2, based on VK Cup 2017 Round 2) A B C D 暴力 水 二分 几何
A. Vicious Keyboard time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- Codeforces Round #405 (rated, Div. 2, based on VK Cup 2017 Round 1) 菜鸡只会ABC!
Codeforces Round #405 (rated, Div. 2, based on VK Cup 2017 Round 1) 全场题解 菜鸡只会A+B+C,呈上题解: A. Bear and ...
- Codeforces Round #405 (rated, Div. 2, based on VK Cup 2017 Round 1) C. Bear and Different Names 贪心
C. Bear and Different Names 题目连接: http://codeforces.com/contest/791/problem/C Description In the arm ...
- Codeforces Round #405 (rated, Div. 2, based on VK Cup 2017 Round 1) B - Bear and Friendship Condition 水题
B. Bear and Friendship Condition 题目连接: http://codeforces.com/contest/791/problem/B Description Bear ...
- 【树形dp】Codeforces Round #405 (rated, Div. 1, based on VK Cup 2017 Round 1) B. Bear and Tree Jumps
我们要统计的答案是sigma([L/K]),L为路径的长度,中括号表示上取整. [L/K]化简一下就是(L+f(L,K))/K,f(L,K)表示长度为L的路径要想达到K的整数倍,还要加上多少. 于是, ...
随机推荐
- 使用nginx实现浏览器跨域请求
跨域访问问题, 相信很多人都遇到过, 并且都用不同的办法去解决过. 方法有很多种, 不一一叙述了. 这里主要使用nginx反向代理来解决跨域问题. 啥是跨域? 假如你是百度开发人员, 在百度页面去请求 ...
- 一步步实现windows版ijkplayer系列文章之六——SDL2源码分析之OpenGL ES在windows上的渲染过程
一步步实现windows版ijkplayer系列文章之一--Windows10平台编译ffmpeg 4.0.2,生成ffplay 一步步实现windows版ijkplayer系列文章之二--Ijkpl ...
- 001_linux下的log
如果愿意在Linux环境方面花费些时间,首先就应该知道日志文件的所在位置以及它们包含的内容.在系统运行正常的情况下学习了解这些不同的日志文件有助于你在遇到紧急情况时从容找出问题并加以解决. 以下介绍的 ...
- sqlserver2008r2数据库使用触发器对sa及其他数据库账号访问进行IP限制
一.只允许指定IP访问数据库 创建测试账号 CREATE LOGIN testuser WITH PASSWORD = '123' GO CREATE TRIGGER [tr_connection_l ...
- OracleOCP认证 之 Linux基础
Linux 基础 一.SHELL 1: Shell 简介 shell 是用户和Linux 操作系统之间的接口.Linux 中有多种shell, 其中缺省使用的是bash. Linux 系统的shell ...
- OCM_第十五天课程:Section6 —》数据库性能调优 _SQL 访问建议 /SQL 性能分析器/配置基线模板/SQL 执行计划管理/实例限制
注:本文为原著(其内容来自 腾科教育培训课堂).阅读本文注意事项如下: 1:所有文章的转载请标注本文出处. 2:本文非本人不得用于商业用途.违者将承当相应法律责任. 3:该系列文章目录列表: 一:&l ...
- abstract class 和 interface 区别
本文出自与:heipai:tsg666 含有 abstract 修饰符的 class 即为抽象类,abstract 类不能创建的实例对象.含有 abstract 方法的类必须定义为 abstract ...
- python 全栈开发,Day13(迭代器,生成器)
一.迭代器 python 一切皆对象 能被for循环的对象就是可迭代对象 可迭代对象: str,list,tuple,dict,set,range 迭代器: f1文件句柄 dir打印该对象的所有操作方 ...
- Asp.Net构架(Http请求处理流程)、(Http Handler 介绍)、(HttpModule 介绍)
Asp.Net构架(Http请求处理流程) Http请求处理流程概述 对于普通访问者来说,这就像每天太阳东边升起西边落下一样是理所当然的:对于很多程序员来说,认为这个与己无关,不过是系统管理员或者网管 ...
- (第1篇)什么是hadoop大数据?我又为什么要写这篇文章?
摘要: hadoop是什么?hadoop是如何发展起来的?怎样才能正确安装hadoop环境? 这些天,有很多人咨询我大数据相关的一些信息,觉得大数据再未来会是一个朝阳行业,希望能尽早学会.入行,借这个 ...