MG loves apple

 Accepts: 20
 Submissions: 693
 Time 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 (乱搞?)的更多相关文章

  1. hdu 6020 MG loves apple 恶心模拟

    题目链接:点击传送 MG loves apple Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 262144/262144 K (Ja ...

  2. hdu 6021 MG loves string

    MG loves string Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others ...

  3. hdu 6021 MG loves string (一道容斥原理神题)(转)

    MG loves string    Accepts: 30    Submissions: 67  Time Limit: 2000/1000 MS (Java/Others)    Memory ...

  4. ●HDU 6021 MG loves string

    题链: http://acm.hdu.edu.cn/showproblem.php?pid=6021 题解: 题意:对于一个长度为 N的由小写英文字母构成的随机字符串,当它进行一次变换,所有字符 i ...

  5. 【BestCoder Round #93 1002】MG loves apple

    [题目链接]:http://acm.hdu.edu.cn/showproblem.php?pid=6020 [题意] 给你一个长度为n的数字,然后让你删掉k个数字,问你有没有删数方案使得剩下的N-K个 ...

  6. HDU 4409 Family Name List --乱搞、LCA

    题意: 给出一些名字,名字间有父子关系,有三种操作: 1.按祖先到后代,兄弟间按字典序由小到大排序,然后输出 2.求某个节点的兄弟节点有多少个,包括自己(注意,根节点的兄弟节点是1) 3.求节点a和b ...

  7. HDU 1272 小希的迷宫(乱搞||并查集)

    小希的迷宫 Problem Description 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有 ...

  8. HDU 5938 Four Operations(乱搞)题解

    题意:把'+', '-', '*' 和'/'按顺序插入任意两数字间隔,使得操作得到后计算后最大. 思路:没想到是个水题,打的时候想得太复杂了.这道题其实只要考虑*和/.显然我们要把a*b/c弄到最小. ...

  9. HDU 4614 Vases and Flowers(线段树+记录区间始末点或乱搞)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4614 题目大意:有n个空花瓶,有两种操作: 操作①:给出两个数字A,B,表示从第A个花瓶开始插花,插B ...

随机推荐

  1. cmd 使用gii的命令行用法

    1.生成模型 php yii gii/model --ns=common\models --tableName=contract_supplemental --modelClass=ContractS ...

  2. 转:国内优秀npm镜像推荐及使用

    原文:http://riny.net/2014/cnpm/ npm全称Node Package Manager,是node.js的模块依赖管理工具.由于npm的源在国外,所以国内用户使用起来各种不方便 ...

  3. c++树,知道前序和中序求后序遍历

    经常有面试题就是知道一棵树的前序遍历和中序遍历让你写出后序遍历,这个慢慢画是能画出来的,但是要很快的弄出来还是要懂原理. 首先说一下三种遍历:所谓的前序后序和中序都是遍历时遍历根节点的顺序.子树的话依 ...

  4. SPI协议及其工作原理浅析【转】

    转自:http://www.laoliu-soft.net/category/tech_chap/tech_linux/ 一.概述. SPI, Serial Perripheral Interface ...

  5. 【转载】C#异常Retry通用类

    //Retry机制 public static class Retry { /// <summary> /// 重试零个参数无返回值的方法 /// </summary> /// ...

  6. 简单实现JS上传图片预览功能

    HTML代码 <div class="upload"> <input type="button" class="btn" ...

  7. spring data jpa条件分组查询及分页

    原book对象 package com.shaying.domain; import javax.persistence.Column; import javax.persistence.Entity ...

  8. laravel 上传文件到亚马逊 aws s3

    参考: https://github.com/aws/aws-sdk-php-laravel https://www.jianshu.com/p/e48d82bff20b

  9. 将table导出为excel格式文件

    html: <table cellpadding="0" cellspacing="0" class="data_table" id= ...

  10. 解决uc浏览器不支持vw单位的方法

    插入下段代码,使用rem来代替vw <script type="text/javascript"> (function (doc, win) { var docEl = ...