【HDU 6020】 MG loves apple (乱搞?)
MG loves apple
Accepts: 20Submissions: 693Time Limit: 3000/1500 MS (Java/Others)Memory Limit: 262144/262144 K (Java/Others)问题描述MGMG是一个财富爆表的男孩子。他拥有N(1<=N<=100000)N(1<=N<=100000)个苹果,每个苹果上标有一个数字00~99,代表它的价值。 一个合法的数字是不含有前导零的,这nn个苹果恰好排成了一个合法的NN位数。 MGMG拥有拿去KK个苹果的权利(0<=K<0<=K<NN)。
他想知道是否存在方案,使得恰好拿去KK个苹果后,序列中剩下的苹果排成的合法数字模33等于零。数据保证所有NN之和不超过10000001000000. MGMG认为这件事非常容易,不屑于用计算机解决,于是运用他高超的人类智慧开始进行计算。作为一名旁观者,你也想挑战MGMG智慧,请你写个程序,计算答案。输入描述第一行一个整数TT,代表数据组数(1 <=T<=601<=T<=60)。
接下来,对于每组数据——
第一行两个个整数NN,KK,表示苹果序列长度,以及需要拿去的苹果个数.
接下来一行NN个整数XX,表示每个苹果的价值(0<=X<=90<=X<=9)。输出描述对于每一组数据,输出一行。
若方案存在,则输出“yes”,否则输出“no”。(输出不包含引号)输入样例2
5 2
11230
4 2
1000输出样例yes
no
【分析】
写这个主要是我昨天WA了7次没A。。
怎么说,打法太容易出bug。。
【表示不知道别人是怎么做的。。。
为了保证没有前导0,我们枚举一个不为0的开头,于是问题变成了询问在a0个0,a1个1,a2个2中选x个数,他们加上y能不能模3等于0。
这个东西啊,我是不敢枚举什么的。我们可以先随便选x个数,然后判断,不行的话,交换1个或者两个选了和没选的数,再判断。
显然交换的数的个数不会超过2个的哦。
这里我就暴力枚举交换的东西了。
【主要是我昨天没有枚举最前面的数,而是贪心先删掉后k个再交换,然后前面交换时的前导0没有了保证,就搞了很久。。。
【还是ORZ那些秒A的人
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define Maxn 100010 int mymax(int x,int y) {return x>y?x:y;}
int mymin(int x,int y) {return x<y?x:y;} int f[Maxn][];
int b[],c[]; bool check(int a0,int a1,int a2,int x,int y)
{
// if(x==0) return y==0;
// if(x==1) return (y==0&&a0)||(y==1&&a1)||(y==2&&a2);
int h=;
b[]=b[]=b[]=c[]=c[]=c[]=;
b[]=mymin(a0,x);c[]=a0-b[],x-=b[];
b[]=mymin(a1,x);c[]=a1-b[],x-=b[],h=(h+b[])%;
b[]=mymin(a2,x);c[]=a2-b[],x-=b[],h=(h+b[]*)%;
if((h+y)%==) return ; for(int i=;i<;i++) if(b[i])
for(int j=;j<;j++) if(c[j])
if(((h-i+j+y)%+)%==) return ; for(int i=;i<;i++) if(b[i])
{
b[i]--;
for(int ii=;ii<;ii++) if(b[ii])
{
for(int j=;j<;j++) if(c[j])
{
c[j]--;
for(int jj=;jj<;jj++) if(c[jj])
{
if(((h-i-ii+j+jj+y)%+)%==) return ;
}
c[j]++;
}
}
b[i]++;
}
return ;
} int a[Maxn];
char s[Maxn]; int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n,k;
scanf("%d%d",&n,&k);
scanf("%s",s+);
for(int i=;i<=n;i++) a[i]=s[i]-'';
if(k==n-)
{
bool ok=;
for(int i=;i<=n;i++) if(a[i]%==) ok=;
if(ok) printf("yes\n");
else printf("no\n");
continue;
}
memset(f,,sizeof(f));
for(int i=;i<=n;i++)
for(int j=;j<;j++) f[i][j]=f[i-][j]+(a[i]%==j);
k=n-k;
bool ok=;
for(int i=;i<=n-k+;i++) if(a[i]!=)
{
if(check(f[n][]-f[i][],f[n][]-f[i][],f[n][]-f[i][],k-,a[i]%)) {ok=;break;}
}
if(ok) printf("yes\n");
else printf("no\n");
}
return ;
}
2017-04-02 08:51:33
【HDU 6020】 MG loves apple (乱搞?)的更多相关文章
- hdu 6020 MG loves apple 恶心模拟
题目链接:点击传送 MG loves apple Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 262144/262144 K (Ja ...
- hdu 6021 MG loves string
MG loves string Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others ...
- hdu 6021 MG loves string (一道容斥原理神题)(转)
MG loves string Accepts: 30 Submissions: 67 Time Limit: 2000/1000 MS (Java/Others) Memory ...
- ●HDU 6021 MG loves string
题链: http://acm.hdu.edu.cn/showproblem.php?pid=6021 题解: 题意:对于一个长度为 N的由小写英文字母构成的随机字符串,当它进行一次变换,所有字符 i ...
- 【BestCoder Round #93 1002】MG loves apple
[题目链接]:http://acm.hdu.edu.cn/showproblem.php?pid=6020 [题意] 给你一个长度为n的数字,然后让你删掉k个数字,问你有没有删数方案使得剩下的N-K个 ...
- HDU 4409 Family Name List --乱搞、LCA
题意: 给出一些名字,名字间有父子关系,有三种操作: 1.按祖先到后代,兄弟间按字典序由小到大排序,然后输出 2.求某个节点的兄弟节点有多少个,包括自己(注意,根节点的兄弟节点是1) 3.求节点a和b ...
- HDU 1272 小希的迷宫(乱搞||并查集)
小希的迷宫 Problem Description 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有 ...
- HDU 5938 Four Operations(乱搞)题解
题意:把'+', '-', '*' 和'/'按顺序插入任意两数字间隔,使得操作得到后计算后最大. 思路:没想到是个水题,打的时候想得太复杂了.这道题其实只要考虑*和/.显然我们要把a*b/c弄到最小. ...
- HDU 4614 Vases and Flowers(线段树+记录区间始末点或乱搞)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4614 题目大意:有n个空花瓶,有两种操作: 操作①:给出两个数字A,B,表示从第A个花瓶开始插花,插B ...
随机推荐
- java中集合去重1
//TreeMap 处理 处理后 得到的值 按拼音排序 TreeMap map = new TreeMap(new MaterialComparator()); map.put("东莞&qu ...
- 《JavaScript 实战》:实现图片幻滑动展示效果
滑动展示效果主要用在图片或信息的滑动展示,也可以设置一下做成简单的口风琴(Accordion)效果.这个其实就是以前写的图片滑动展示效果的改进版,那是我第一篇比较受关注的文章,是时候整理一下了. 有如 ...
- 【BZOJ】1426: 收集邮票 期望DP
[题意]有n种不同的邮票,第i次可以花i元等概率购买到一种邮票,求集齐n种邮票的期望代价.n<=10^4. [算法]期望DP [题解]首先设g[i]表示已拥有i张邮票集齐的期望购买次数,根据全期 ...
- 表格标签(table、行、列、表头)
表格标签 一.<table> <table>代表表格标签. <table></table> 1.width 表示表格宽度,宽度表达方式有像素和百分 ...
- js 给指定ID赋值
js 给指定ID赋值 <script language="javascript" type="text/javascript"> document. ...
- 通过jquery.validate.js校验表单字段是否合法
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- webpack4 未设置mode会自动压缩
最近想用LayaBox做个小游戏,然而Laya本身不自带构建工具.然后觉得写模块化的东西还是用webpack好使,用es6的语法也比较清晰. 于是就装了webpack,只用babel-loader来编 ...
- 利用Jsoup模拟跳过登录爬虫获取数据
今天在学习爬虫的时候想着学习一下利用jsoup模拟登录.下面分为有验证码和无验证码的情况进行讨论. ---------------------------无验证码的情况---------------- ...
- onvif客户端
前言 做开发有8年时间了,ffmpeg和onvif与我是特别有缘的了(说着玩的,我更认为是因为他们确实强大^_^). ffmpeg在毕业设计时就有用到,5年后做windows.linux播放库时又有用 ...
- mysqldump 逻辑备份的正确方法【转】
1. 利用mysqldump进行逻辑备份 1)全逻辑备份: mysqldump -uxxx -p --flush-logs --delete-master-logs --all-databases & ...