Codeforces Round #402 (Div. 2) A+B+C+D
Codeforces Round #402 (Div. 2)
A. Pupils Redistribution
模拟大法好。两个数列分别含有n个数x(1<=x<=5) 。现在要求交换一些数使得两个数列含有某个数字的个数相同,求最少交换次数。
int v1[N],v2[N];
int main()
{
int n;
while(~scanf("%d",&n))
{
int x;
memset(v1,0,sizeof(v1));
memset(v2,0,sizeof(v2));
for(int i=0; i<n; i++)
{
scanf("%d",&x);
v1[x]++;
}
for(int i=0; i<n; i++)
{
scanf("%d",&x);
v2[x]++;
}
int f=0;
int ans=0;
for(int i=1; i<=5; i++)
{
if(v1[i]==v2[i]) continue;
if(v1[i]>v2[i])
{
int num=v1[i]-v2[i];
for(int j=1; j<=5; j++)
if(j!=i&&v2[j]-v1[j]>=num)
{
v1[i]=v2[i];
v2[j]-=num/2;
v1[j]+=num/2;
ans+=num/2;
break;
}
}
else
{
int num=v2[i]-v1[i];
for(int j=1; j<=5; j++)
if(j!=i&&v1[j]-v2[j]>=num)
{
v1[i]=v2[i];
v2[j]+=num/2;
v1[j]-=num/2;
ans+=num/2;
break;
}
}
}
for(int i=1; i<=5; i++)
if(v1[i]!=v2[i]) f=1;
if(f) puts("-1");
else pd(ans);
}
return 0;
}
B. Weird Rounding
给你一个int范围内的数和一个k,求最少删除几个数字使得剩余的数字组成的数能被10^k整除,保证有解。
贪心:能被10^k整除说明后缀至少有k个0,只需从后往前遍历如果达到了k个0就不用删,如果还未达到k个0而出现了数字那么ans++,因为要删掉这个数字,如果没法再删除数字而k还未减为0,则输出len-1(只留一个0)
string s;
int v[50];
int main()
{
int k;
cin>>s>>k;
int len=s.size();
int num=0,ans=0;
for(int i=len-1;i>=0&&k;i--)
{
if(s[i]=='0') k--;
else ans++;
}
if(!k) cout<<ans<<endl;
else cout<<len-1<<endl;
C. Dishonest Sellers
贪心大法。小明要买n件商品,但每件商品在一周后都会打折,这并不意味会比原价要低。小明本周最少要买k件,现在给出这n件商品原价和打折后的价钱,求买n件商品最少花多少钱。
贪心思路:首先我们知道这k件商品肯定得按原价买,我们为了划算肯定买那些降价低的商品,然后其余的按最小价钱买即可。所以就是一个结构体排序:降价低的优先,买满k件(原价买)后按最小价钱买。
struct S
{
int a,b;
} p[N];
int cmp(S x,S y)
{
return x.a-x.b<y.a-y.b;
}
int v[N];
int main()
{
int n,k;
while(~scanf("%d%d",&n,&k))
{
for(int i=0; i<n; i++)
scanf("%d",&p[i].a);
for(int i=0; i<n; i++)
scanf("%d",&p[i].b);
sort(p,p+n,cmp);
ll ans=0;
int x=n;
for(int i=0; i<n; i++)
{
if(k)
{
ans+=p[i].a;
k--;
}
else ns+=min(p[i].a,p[i].b);
} cout<<ans<<endl;
}
return 0;
}
D. String Game
做完C题后还有半小时的样子,这题然后就各种YY,最终没过本场掉11分结束。
题意:一个人在玩删字母游戏,给出原串和要删除的字母的位置的先后顺序,然后求最多能删多少个字母还能够得到串p。也就是说再继续删一个字母再也无法得到串p了。题目保证删除过程中能得到串p。
思路:二分答案O(n)判定
string s,p;
int a[N],v[N],len,len2;
int find(int k)
{
int l=0;
for(int i=0; i<len; i++)
if(v[i+1]>k)
{
if(s[i]==p[l]) l++;
if(l>=len2) return 1;
}
return 0;
}
int main()
{
memset(v,0,sizeof(v));
cin>>s>>p;
len=s.size();
len2=p.size();
int x;
for(int i=1; i<=len; i++) scanf("%d",&x),v[x]=i;
int l=0,r=len,ans=0;
while(l<=r)
{
int mid=(l+r)/2;
if(find(mid)) l=mid+1,ans=mid;
else r=mid-1;
}
cout<<ans<<endl;
return 0;
}
Codeforces Round #402 (Div. 2) A+B+C+D的更多相关文章
- Codeforces Round #402 (Div. 2)
Codeforces Round #402 (Div. 2) A. 日常沙比提 #include<iostream> #include<cstdio> #include< ...
- Codeforces Round #402 (Div. 2) A,B,C,D,E
A. Pupils Redistribution time limit per test 1 second memory limit per test 256 megabytes input stan ...
- Codeforces Round #402 (Div. 2) D. String Game
D. String Game time limit per test 2 seconds memory limit per test 512 megabytes input standard inpu ...
- Codeforces Round #402 (Div. 2) A B C sort D二分 (水)
A. Pupils Redistribution time limit per test 1 second memory limit per test 256 megabytes input stan ...
- 【DFS】Codeforces Round #402 (Div. 2) B. Weird Rounding
暴搜 #include<cstdio> #include<algorithm> using namespace std; int n,K,Div=1,a[21],m,ans=1 ...
- Codeforces Round #402 (Div. 2) 题解
Problem A: 题目大意: 给定两个数列\(a,b\),一次操作可以交换分别\(a,b\)数列中的任意一对数.求最少的交换次数使得任意一个数都在两个序列中出现相同的次数. (\(1 \leq a ...
- Codeforces Round #402 (Div. 2) 阵亡记
好长时间没有打Codeforces了,今天被ysf拉过去打了一场. lrd也来参(nian)加(ya)比(zhong)赛(sheng) Problem A: 我去,这不SB题吗.. 用桶统计一下每个数 ...
- CodeForces Round #402 (Div.2) A-E
2017.2.26 CF D2 402 这次状态还算能忍吧……一路不紧不慢切了前ABC(不紧不慢已经是在作死了),卡在D,然后跑去看E和F——卧槽怎么还有F,早知道前面做快点了…… F看了看,不会,弃 ...
- Codeforces Round #402 (Div. 2) B
Description Polycarp is crazy about round numbers. He especially likes the numbers divisible by 10k. ...
随机推荐
- IE6常见CSS解析Bug和hack
第一:图片间隙 a:div中的图片间隙: 描述:在div中插入图片时,图片会将div下方撑大3像素 hack1:将<div>和<img>写在一行 hack2:将<img& ...
- 查找算法(顺序查找、二分法查找、二叉树查找、hash查找)
查找功能是数据处理的一个基本功能.数据查找并不复杂,但是如何实现数据又快又好地查找呢?前人在实践中积累的一些方法,值得我们好好学些一下.我们假定查找的数据唯一存在,数组中没有重复的数据存在. (1)顺 ...
- COGS 1710. [POJ2406]字符串的幂
★☆ 输入文件:powerstrings.in 输出文件:powerstrings.out 简单对比时间限制:3 s 内存限制:256 MB [题目描述] 对于给定的两个字符串a,b, ...
- ios项目icon和default图片命名规则
一.应用图片标准iOS控件里的图片资源,苹果已经做了相应的升级,我们需要操心的是应用自己的图片资源.就像当初为了支持iPhone 4而制作的@2x高分辨率版本(译者:以下简称高分)图片一样,我们要为i ...
- 浏览器输入一个url到整个页面显示出来经历了哪些过程?
https://cloud.tencent.com/developer/article/1396399 https://www.cnblogs.com/haonanZhang/p/6362233.ht ...
- 【转】Intellij Idea识别Java Web项目
使用maven生成一个Java项目,手动添加相应的web目录WEB_INF,web.xml等,此时idea没有自动识别为web项目,此时编辑web.xml文件会出现一些不该出现的错误,需要做的就是让i ...
- 线程调度的问题:Lock Convoy(锁封护)与Priority Inversion(优先级反转)
Lock Convoy(锁封护) [1]Lock Convoy是在多线程并发环境下由于锁的使用而引起的性能退化问题.当多个相同优先级的线程频繁地争抢同一个锁时可能会引起lock convoy问题,一般 ...
- cocos2d popSceneWithTransition()方法
要在CCDirector.h中增加如下方法: template <typename T> void popSceneWithTransition(float t) { CCASSERT(_ ...
- Vnc自动登录器(VncManager)v1.3-多国语言绿色版-Release1-20190215
Vnc自动登录器 v1.3 (20190215) By: ybmj@vip.163.com , https://www.cnblogs.com/ybmj/ 下载地址:http://bbs.wuyou. ...
- CF-1100 E Andrew and Taxi
CF-1100E Andrew and Taxi https://codeforces.com/contest/1100/problem/E 知识点: 二分 判断图中是否有环 题意: 一个有向图,每边 ...