【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 ...
随机推荐
- Flex用HTTPService调用servlet返回中文乱码解决
servlet中使用URLEncoder.encode对输出内容进行编码 Flex中使用decodeURIComponent进行解码
- [linux]linux下安装mysql
1.安装g++$sudo apt-get install build-essential注:此命令会同时安装gcc和make2.安装cmake$sudo apt-get install cmake3. ...
- 【CodeForces】889 B. Restoration of string
[题目]B. Restoration of string [题意]当一个字符串在字符串S中的出现次数不小于任意子串的出现次数时,定义这个字符串是高频字符串.给定n个字符串,求构造出最短的字符串S满足着 ...
- 【CodeForces】915 F. Imbalance Value of a Tree 并查集
[题目]F. Imbalance Value of a Tree [题意]给定n个点的带点权树,求所有路径极差的和.n,ai<=10^6 [算法]并查集 [题解]先计算最大值的和,按点权从小到大 ...
- 用java代码调用shell脚本执行sqoop将hive表中数据导出到mysql
1:创建shell脚本 touch sqoop_options.sh chmod 777 sqoop_options.sh 编辑文件 特地将执行map的个数设置为变量 测试 可以java代码传参数 ...
- 【洛谷 P1501】 [国家集训队]Tree II(LCT)
题目链接 Tree Ⅱ\(=\)[模板]LCT+[模板]线段树2.. 分别维护3个标记,乘的时候要把加法标记也乘上. 还有就是模数的平方刚好爆\(int\),所以开昂赛德\(int\)就可以了. 我把 ...
- C语言与汇编语言对照分析
游戏通常会包含各种各样的功能,如战斗系统.UI渲染.经济系统.生产系统等,每个系统又包含各式各样子功能,如伤害判定.施法.使用道具.角色移动.玩家之间交易等等.这些游戏功能在代码实现中往往少不了条件判 ...
- 可怕的npm蠕虫
https://hackernoon.com/im-harvesting-credit-card-numbers-and-passwords-from-your-site-here-s-how-9a8 ...
- layui实现类似于bootstrap的模态框功能
以前习惯了bootstrap的模态框,突然换了layui,想的用layui实现类似于bootstrap的模态框功能. 用到了layui的layer模块,例如: <!DOCTYPE html> ...
- VirtualBox与Genymotion命令行启动
一.VirtualBox命令行启动 1.添加环境变量: %programfiles%\Oracle\VirtualBox 2.用VBoxManage查看已存在vmname|uuid命令: VBoxMa ...