【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 ...
随机推荐
- python Multiprocessing 多进程应用
在运维工作中,经常要处理大量数据,或者要跑一些时间比较长的任务,可能都需要用到多进程,不管是管理端下发任务,还是客户端执行任务,如果服务器配置还可以,跑多进程还是挺能解决问题的 Multiproces ...
- 数据库 插入时 碰到NULL报错判断的一种方法(技巧)
//public static object ToDBNull(object value) 判断插入数据的时候个别参数不能为空的时候做的判断方法 //{ // if (value == null) / ...
- Cloudera 安装
参考网址: http://tcxiang.iteye.com/blog/2087597 http://archive.cloudera.com/cdh5/ http://archive.clouder ...
- 探讨一个“无法创建JVM”的问题(已解决)
ava版本:1.4 运行设置: -Xms1G -Xmx4G 报错: [ Incompatible initial and maximum heap sizes specified: ][ initia ...
- 【洛谷 P3648】 [APIO2014]序列分割 (斜率优化)
题目链接 假设有\(3\)段\(a,b,c\) 先切\(ab\)和先切\(bc\)的价值分别为 \(a(b+c)+bc=ab+bc+ac\) \((a+b)c+ab=ab+bc+ac\) 归纳一下可以 ...
- vsftpd限速设置
利用vsftp进行速率限制,需要了解几个配置参数 anon_max_rate 设置匿名用户每条连接最大上传或下载速率 local_max_rate 设置本地用户每条连接最大上传或下载速率 max_pe ...
- Codeforces Round #455 (Div. 2)
Codeforces Round #455 (Div. 2) A. Generate Login 题目描述:给出两个字符串,分别取字符串的某个前缀,使得两个前缀连起来的字符串的字典序在所有方案中最小, ...
- Java network programming-guessing game
猜数字游戏 游戏的规则如下: 当客户端第一次连接到服务器端时,服务器端生产一个[0,50]之间的随机数字,然后客户端输入数字来猜该数字,每次客户端输入数字以后,发送给服务器端,服务器端判断该客户端发送 ...
- ELK简单使用
原作者:http://www.cnblogs.com/snidget/p/6269383.html ELK ELK是什么? Elasticsearch LogStash Kibana 1,简单 ...
- Windows: 如何配置IPv6隧道
清空隧道配置: netsh interface ipv6 set teredo disable netsh interface ipv6 6to4 set state disable netsh in ...