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. ...
随机推荐
- js作用域及对象以及一些常用技巧
回顾 流程控制(语句) 分支 if () { }if () { } else { }if () { } else if () { } else if () { ...
- 5、两个栈实现队列------------>剑指offer系列
题目 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路 栈1: 用于入队列存储 栈2: 出队列时将栈1的数据依次出栈,并入栈到栈2中 栈2出栈即栈1的底部数据 ...
- 浅析ES6中的iterator
1.iterator迭代器必须保证其遍历终止条件可控,否则会形成死循环demo: //会用到iterator接口的场合 //1.for...of循环 //2. ...解构表达式 const obj = ...
- okhttputils使用(zhuan)
OkHttpUtils 封装了okhttp的网络框架,支持大文件上传下载,上传进度回调,下载进度回调,表单上传(多文件和多参数一起上传),链式调用,可以自定义返回对象,支持Https和自签名证书,支持 ...
- ios自定义日期、时间、城市选择器
选择器,我想大家都不陌生,当需要用户去选择某些范围值内的一个固定值时,我们会采用选择器的方式.选择器可以直观的提示用户选择的值范围.统一信息的填写格式,同时也方便用户快速的进行选择,比如对于性别,正常 ...
- Git常用命令的使用方法
推荐一个比较好的GIT的教学地址,廖雪峰老师的git教程! 这里简述Git常用命令的使用方法: 一.初始化git 右键进入 Git Bash 1.建立身份信息 git config --global ...
- codevs 2915 期末考试
时间限制: 1 s 空间限制: 16000 KB 题目等级 : 黄金 Gold 题目描述 Description 期末考试要来了,某同学正在努力复习. 他要复习N个知识点,每个知识点需要一定的知识 ...
- C++类构造函数、析构函数运行机理
http://blog.sina.com.cn/s/blog_6fd68d5f0100n60h.html 前言--构造函数.析构函数的简单理解:1)构造函数---对象被创建时候调用的函数:2)析构函数 ...
- Navicat 复制多条数据
- golang 强制重新全部编译
/home/用户名/.cache 删除缓存试试?? 修改的东西老失败 编译结果总不变 神奇了 go build -a -x -v加一句-a 强制重新编译.