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的更多相关文章

  1. Codeforces Round #402 (Div. 2)

    Codeforces Round #402 (Div. 2) A. 日常沙比提 #include<iostream> #include<cstdio> #include< ...

  2. 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 ...

  3. 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 ...

  4. 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 ...

  5. 【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 ...

  6. Codeforces Round #402 (Div. 2) 题解

    Problem A: 题目大意: 给定两个数列\(a,b\),一次操作可以交换分别\(a,b\)数列中的任意一对数.求最少的交换次数使得任意一个数都在两个序列中出现相同的次数. (\(1 \leq a ...

  7. Codeforces Round #402 (Div. 2) 阵亡记

    好长时间没有打Codeforces了,今天被ysf拉过去打了一场. lrd也来参(nian)加(ya)比(zhong)赛(sheng) Problem A: 我去,这不SB题吗.. 用桶统计一下每个数 ...

  8. CodeForces Round #402 (Div.2) A-E

    2017.2.26 CF D2 402 这次状态还算能忍吧……一路不紧不慢切了前ABC(不紧不慢已经是在作死了),卡在D,然后跑去看E和F——卧槽怎么还有F,早知道前面做快点了…… F看了看,不会,弃 ...

  9. Codeforces Round #402 (Div. 2) B

    Description Polycarp is crazy about round numbers. He especially likes the numbers divisible by 10k. ...

随机推荐

  1. phpmyadmin消除无法保存最近表的提示

    运行 sudo dpkg-reconfigure phpmyadmin 重新配置phpmyadmin ip选择127.0.0.1,端口3306,"MySQL username for php ...

  2. python经典一百道习题(转自奶酪博客)

    无论学习哪门计算机语言,只要把100例中绝大部分题目都做一遍,就基本掌握该语言的语法了. [程序1] 题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? #Filena ...

  3. two.js基本操作

    今天介绍一个网络上并不常用的插件two.js,two.js是一款网页二维绘图软件,可以在指定区域内产生自设的各种动画效果 下载网址如下: https://two.js.org/#download 一: ...

  4. spring boot图片上传至远程服务器并返回新的图片路径

    界面上传图片时考虑到可能会有用户的图片名称一致,使用UUID来对图片名称进行重新生成. //UUIDUtils public class UUIDUtils { public static Strin ...

  5. jQuery和AJAX基础

    jQuery和AJAX基础 jQuery 基础: 1.jQuery 选择器: 元素选择器:$("p"): #id 选择器:$("#test"): .class ...

  6. Objective-C Numbers

    In Objective-C programming language, in order to save the basic data types like int, float, bool in ...

  7. jmeter中文件上传配置

  8. lambda表达式的简单入门

    前言:本人在看<Java核心技术I>的时候对lamdba表达式还不是太上心,只是当做一个Java 8的特性了解一下而已,可是在<Java核心技术II>里面多次用到,所以重新入门 ...

  9. FIBON高精度

    #include<stdio.h> #include<string.h> int u,n; ],b[],h[]; ],y[],z[]; int main() { char s( ...

  10. CAD命令标志

    CAD命令标志 主标识:(常用的)ACRX_CMD_MODAL 在别的命令执行的时候该命令不会在其中执行.ACRX_CMD_TRANSPARENT 命令可以再其它命令中执行,但在该标志下ads_sss ...