FZU Problem 1895 整除45问题(整除问题+字符串维护+优化)
这个题有点烧脑啊,但是只要想清楚被45整除的数,肯定能被5和9整除,能被9整除的数各位加起来肯定是9的倍数,能被5整除的末尾是0或5.
然后dfs的过程稍微不太好懂,还有几个优化必须要注意.dfs的过程是选出哪些数我们不要,而且不要的数越少越好,所以删除的数在dfs的过程中应该越来越小,这一步必须有,否则超时.
输出的时候也需要注意下0的情况,只能输出一个0,下面是代码
#include <stdio.h>
#include <string.h>
#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];
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 dfs(int m, int d, int sum)
{
if(d>=m)
{
if((sum-tmp)% == )
{
char now[N];
memset(now,,sizeof(now));
int len = ;
for(int i=; i>=; i--)
{
for(int j = ; j < cnt[i]; j++)
now[len++] = i + '';
}
now[len++] = dir[id] + '';
if(m < x || (cmp(ans, now) && m == x))
{
flag = true;
x = m;
strcpy(ans, now);
}
}
return;
}
for(int i = ; i <= ; i++)
{
if(!cnt[i]) continue;
cnt[i]--;
dfs(m, d+, sum+i);
cnt[i]++;
}
}
int main()
{
int cas;
scanf("%d", &cas);
for(int i=; i<=cas; i++)
{
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]++;
}
for(int i=; i<; i++)
{
memcpy(cnt, rec, sizeof(rec));
cnt[dir[i]]--;
if (cnt[dir[i]] < ) continue;
id = i;
for(int j=; j<=tmp && j<=x; j++)
dfs(j, , );
}
if(!flag)
{
printf("impossible\n");
continue;
}
int lenss = strlen(ans),sum1 = ;
for(int i = ; i < lenss; i++)
{
sum1 += ans[i] - '';
}
if(sum1 == )
{
puts("");
continue;
}
puts(ans);
}
return ;
}
FZU Problem 1895 整除45问题(整除问题+字符串维护+优化)的更多相关文章
- FZU 1912 Divisibility by Thirty-six(整除问题+字符串维护+贪心)
这个整除36的与整除45的完全一样,就是被4整除的有点多,但都是两位数,所以枚举后面两位就可以了. #include <stdio.h> #include <string.h> ...
- FZu Problem 2233 ~APTX4869 (并查集 + sort)
题目链接: FZu Problem 2233 ~APTX4869 题目描述: 给一个n*n的矩阵,(i, j)表示第 i 种材料 和 第 j 种材料的影响值,这个矩阵代表这n个物品之间的影响值.当把这 ...
- FZu Problem 2236 第十四个目标 (线段树 + dp)
题目链接: FZu Problem 2236 第十四个目标 题目描述: 给出一个n个数的序列,问这个序列内严格递增序列有多少个?不要求连续 解题思路: 又遇到了用线段树来优化dp的题目,线段树节点里 ...
- 翻翻棋(找规律问题)(FZU Problem 2230)
题目是这样的: FZU Problem 2230 象棋翻翻棋(暗棋)中双方在4*8的格子中交战,有时候最后会只剩下帅和将.根据暗棋的规则,棋子只能上下左右移动,且相同的级别下,主动移动到地方棋子方将吃 ...
- 九度OJ 1104:整除问题 (整除、因式分解)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4142 解决:1346 题目描述: 给定n,a求最大的k,使n!可以被a^k整除但不能被a^(k+1)整除. 输入: 两个整数n(2< ...
- fzu Problem 2148 Moon Game(几何 凸四多边形 叉积)
题目:http://acm.fzu.edu.cn/problem.php?pid=2148 题意:给出n个点,判断可以组成多少个凸四边形. 思路: 因为n很小,所以直接暴力,判断是否为凸四边形的方法是 ...
- fzu Problem 2140 Forever 0.5(推理构造)
题目:http://acm.fzu.edu.cn/problem.php?pid=2140 题意: 题目大意:给出n,要求找出n个点,满足: 1)任意两点间的距离不超过1: 2)每个点与(0,0)点的 ...
- Fzu Problem 2082 过路费 LCT,动态树
题目:http://acm.fzu.edu.cn/problem.php?pid=2082 Problem 2082 过路费 Accept: 528 Submit: 1654Time Limit ...
- FZU Problem 2169 shadow
http://acm.fzu.edu.cn/problem.php?pid=2169 题目大意: S王国有N个城市,有N-1条道路.王都为编号1的城市.叛军驻扎在很多城市.除了王都外有K个城市有军队, ...
随机推荐
- 【Machine Learning in Action --5】逻辑回归(LogisticRegression)从疝气病预测病马的死亡率
背景:使用Logistic回归来预测患有疝气病的马的存活问题,这里的数据包括368个样本和28个特征,疝气病是描述马胃肠痛的术语,然而,这种病并不一定源自马的胃肠问题,其他问题也可能引发疝气病,该数据 ...
- 在block函数中规避错误信息 "capturing self strongly in this block is likely to lead to a retain cycle”
以形如 _fontValueChangedBlock = ^(){ [self.fontSmallButton addTarget:self action:@selector(btnFontSmall ...
- apicloud教程
http://community.apicloud.com/bbs/forum.php?mod=viewthread&tid=15939
- Hash算法冲突解决方法分析
采用开放定址法处理散列表的冲突时,其平均查找长度? 高于链接法处理冲突 低于二分查找 开放定址法:一旦发生冲突,就去寻找下一个空的散列地址,只要散列地址够大,空的地址总会找到 链地址法: 一旦发生冲 ...
- spring框架--IOC容器,依赖注入
思考: 1. 对象创建创建能否写死? 2. 对象创建细节 对象数量 action 多个 [维护成员变量] service 一个 [不需要维护公共变量] dao 一个 [不需要维护 ...
- hadoop 及hbase zookeeper 经常出现问题
往往是以下几个 1/ 各节点时间不统一(写shell文件统一时间) 2/配置文件 /etc/hosts文件中ip地址配置错误(更新ip) 3/断网后重启机器 ip地址被修改(更新配置文件中的ip)
- android 常用
1:常用之动画(View Animation,Drawable Animation,Property Animation) http://blog.csdn.net/huxueyan521/artic ...
- 杭电OJ分类
基础题:1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028.1029.1032.1037.1040.1048.1056.1058.1 ...
- oracle 序列介绍
序列介绍 序列是一个计数器,它并不会与特定的表关联.通过创建Oracle序列和触发器实现表的主键自增. 序列的用途一般用来填充主键和计数. 序列使用 1.创建序列 ORACLE序列的语法格式为: CR ...
- 安装lnmp(linux nginx mysql php)
下载或者在云盘里找lnmp1.2-full.tar.gz 用 tar -zxvf lnmp1.2-full.tar.gz解压 进入 ,运行./install.sh安装.根据提示. 如果出现yum锁定, ...