FZU 1912 Divisibility by Thirty-six(整除问题+字符串维护+贪心)
这个整除36的与整除45的完全一样,就是被4整除的有点多,但都是两位数,所以枚举后面两位就可以了.
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
const int N = ;
const int M = ;
const int dir[][] = { {, }, {, }, {, }, {, }, {, }, {, }, {, }, {, }, {, }, {, }, {, }, {, }, {, }, {, }, {, }, {, }, {, }, {, }, {, }, {, }, {, }, {, }
}; int tmp, rec[M], cnt[M];
int n, s[N], x, id;
bool flag;
char ans[N]; void init()
{
char num[N];
scanf("%s", num);
x = strlen(num), tmp = ; flag = false;
memset(rec, , sizeof(rec));
memset(ans, , sizeof(ans)); for (int i = ; i < x; i++)
{
int cur = num[i] - '';
tmp += cur;
rec[cur]++;
}
}
void put(int a[], int d, char *str)
{
int len = ;
for (int i = ; i >= ; i--)
{
for (int j = ; j < a[i]; j++)
str[len++] = i + '';
}
for (int i = ; i < ; i++)
str[len++] = dir[d][i] + '';
str[len] = '\0';
} bool cmp(char *a, char *b)
{
for (int i = ; a[i]; i++)
{
if (a[i] != b[i]) return a[i] < b[i];
}
return false;
} void judge(int m)
{ char now[N];
put(cnt, id, now);
if (m < x || (cmp(ans, now) && m == x))
{
flag = true;
x = m;
strcpy(ans, now);
}
} void dfs(int m, int d, int sum)
{ if (d >= m)
{
if ((sum - tmp) % == ) judge(m);
return;
} for (int i = ; i <= ; i++)
{
if (!cnt[i]) continue;
cnt[i]--;
dfs(m, d + , sum + i);
cnt[i]++;
}
} void search(int d)
{
for (int i = ; i < ; i++)
{
cnt[dir[d][i]]--;
if (cnt[dir[d][i]] < ) return;
}
id = d;
for (int i = ; i <= tmp && i <= x; i++)
dfs(i, , );
} bool isOK(char *str)
{
int sum = , len = strlen(str);
if (len == && rec[] == ) return false;
for (int i = ; i < len; i++)
sum += str[i] - '';
return !sum;
} void solve()
{ for (int i = ; i < ; i++)
{
memcpy(cnt, rec, sizeof(rec));
search(i);
}
if (isOK(ans)) printf("0\n");
else if (flag) puts(ans);
else printf("impossible\n");
} int main()
{
int cas;
scanf("%d", &cas);
for (int i = ; i <= cas; i++)
{ init();
printf("Case %d: ", i);
solve();
}
return ;
}
FZU 1912 Divisibility by Thirty-six(整除问题+字符串维护+贪心)的更多相关文章
- FZU Problem 1895 整除45问题(整除问题+字符串维护+优化)
这个题有点烧脑啊,但是只要想清楚被45整除的数,肯定能被5和9整除,能被9整除的数各位加起来肯定是9的倍数,能被5整除的末尾是0或5. 然后dfs的过程稍微不太好懂,还有几个优化必须要注意.dfs的过 ...
- 从英文变形规则计算到Restful Api设计
➠更多技术干货请戳:听云博客 一天在研究Restful API设计,命名的时候我总是很纠结,我相信大多数人也有这种感觉,不是说想不出来某个单词怎么写的问题,像我这种没事背单词背到13000词量的人也要 ...
- 将十六进制的字符串转化为UIImage
最近写一个项目,有验证码,但是接口返回的并不是验证码图片的URL,而是返回的字节数组16进制字符串.这样就需要把16进制字符串首先字节数组,其次再把字节数组转化为NSData,最后再把NSData转化 ...
- IOS 验证码
将十六进制的字符串转化为UIImage 最近写一个项目,有验证码,但是接口返回的并不是验证码图片的URL,而是返回的字节数组16进制字符串.这样就需要把16进制字符串首先字节数组,其次再把字节数组转化 ...
- HDU 5776 sum (模拟)
sum 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5776 Description Given a sequence, you're asked ...
- 变量,if.elif .else判断
一,计算机的了解 基本组成:主板+cpu+内存 cpu: 主频, 核数(16) 内存:大小(8G, 16G, 32G) 型号: DDR3, DDR4, DDR5, 主频(海盗船,玩家国度) ...
- python学习之老男孩python全栈第九期_day001知识点总结
1. Python2与Python3的区别: Python2:源码不标准,混乱,重复代码太多: Python3:统一标准,去除重复代码. 编码方式: python2的默认编码方式为ASCII码:pyt ...
- 第一天-python基础
每一个今天的坚持都会改变明天的自己! 一.python介绍 python是一门由解释型.弱类型的高级开发编程语言,由龟叔于1989圣诞开发出,后经过二十多年的发展,因其简洁高效的特点而被广泛使用,在世 ...
- 洛谷——P1988 火炬
P1988 火炬 题目描述 2008北京奥运会,你想成为四川汶川的一名火炬手,经过层层选拔,终于到了最后一关,这一关是一道很难的题:任意给定一个正整数N(N<=100000),求一个最小的正整数 ...
随机推荐
- TimeJob权限问题 拒绝访问
internal void RenameWithoutValidation(string value) { if (value == null) throw new ArgumentNullE ...
- javascript动画效果之匀速运动
html和css写在一起方便看,div通过定位设置为-200隐藏,span也是通过定位定在div靠左的中间 <!DOCTYPE html> <html> <head> ...
- js怎么判断浏览器类型
<script type=“text/javascript”> function isIE(){return navigator.appName.indexOf(“Microsoft In ...
- perl Socket接收超时设置
一般来说, IO::Socket::INET里的Timeout设置是对于conncet的 如果你想设置recv接收超时, 可以这样设置: usr Socket: ...... , )); #注意这里p ...
- Webdriver控制翻页控件,并实现向前向后翻页功能,附上代码,仅供参考,其他类似日期控件的功能可以自己封装
新增输入与选择页面的html源码: <div style="margin-top:-60px;" class="modal-content" id=&qu ...
- C中内存分配方式[转载]
在C 中,内存分成5个区,他们分别是堆.栈.自由存储区.全局/静态存储区和常量存储区. 一.简介: 1.栈,就是那些由编译器在需要的时候分配,在无需的时候自动清除的变量的存储区.里面的变量通常是局部变 ...
- play框架概述
今天是来百度实习的第四天,在项目过程中mentor说会用到play框架,当时就一个晕啊.Java还有一个叫play框架,作为一个从大三开始用java的重度javaer,居然不知道这个框架的存在,内心一 ...
- python常用正则表达式
匹配特定数字:^[1-9]\d*//匹配正整数−[1−9]\d∗ //匹配负整数^-?[1-9]\d*//匹配整数[1−9]\d∗|0 //匹配非负整数(正整数 + 0)^-[1-9]\d*|0// ...
- VS中的快捷键快速格式化代码,使好看,整齐
在VC2005中,快捷键是Ctrl + K, Ctrl + F, 这是一个组合键,即先按Ctrl + K, 这时候编辑器会等待下一个按键动作,此时再按Ctrl + F, 即可以格式化代码了,当然,也可 ...
- 在Java中Arrays工具类实现功能的六种方法
使用Arrays工具类,要先导入包即:import.java.util.Arrays 以下是实现六种功能的方法: 1.比较两个数组值是否相等: 结果为true.false.(布尔型不能比较) int ...