这个整除36的与整除45的完全一样,就是被4整除的有点多,但都是两位数,所以枚举后面两位就可以了.

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <iostream>
  4. #include <algorithm>
  5. using namespace std;
  6. const int N = ;
  7. const int M = ;
  8. const int dir[][] = { {, }, {, }, {, }, {, }, {, }, {, }, {, }, {, }, {, }, {, }, {, }, {, }, {, }, {, }, {, },
  9.  
  10. {, }, {, }, {, }, {, }, {, }, {, }, {, }
  11. };
  12.  
  13. int tmp, rec[M], cnt[M];
  14. int n, s[N], x, id;
  15. bool flag;
  16. char ans[N];
  17.  
  18. void init()
  19. {
  20. char num[N];
  21. scanf("%s", num);
  22. x = strlen(num), tmp = ;
  23.  
  24. flag = false;
  25. memset(rec, , sizeof(rec));
  26. memset(ans, , sizeof(ans));
  27.  
  28. for (int i = ; i < x; i++)
  29. {
  30. int cur = num[i] - '';
  31. tmp += cur;
  32. rec[cur]++;
  33. }
  34. }
  35. void put(int a[], int d, char *str)
  36. {
  37. int len = ;
  38. for (int i = ; i >= ; i--)
  39. {
  40. for (int j = ; j < a[i]; j++)
  41. str[len++] = i + '';
  42. }
  43. for (int i = ; i < ; i++)
  44. str[len++] = dir[d][i] + '';
  45. str[len] = '\0';
  46. }
  47.  
  48. bool cmp(char *a, char *b)
  49. {
  50. for (int i = ; a[i]; i++)
  51. {
  52. if (a[i] != b[i]) return a[i] < b[i];
  53. }
  54. return false;
  55. }
  56.  
  57. void judge(int m)
  58. {
  59.  
  60. char now[N];
  61. put(cnt, id, now);
  62. if (m < x || (cmp(ans, now) && m == x))
  63. {
  64. flag = true;
  65. x = m;
  66. strcpy(ans, now);
  67. }
  68. }
  69.  
  70. void dfs(int m, int d, int sum)
  71. {
  72.  
  73. if (d >= m)
  74. {
  75. if ((sum - tmp) % == ) judge(m);
  76. return;
  77. }
  78.  
  79. for (int i = ; i <= ; i++)
  80. {
  81. if (!cnt[i]) continue;
  82. cnt[i]--;
  83. dfs(m, d + , sum + i);
  84. cnt[i]++;
  85. }
  86. }
  87.  
  88. void search(int d)
  89. {
  90. for (int i = ; i < ; i++)
  91. {
  92. cnt[dir[d][i]]--;
  93. if (cnt[dir[d][i]] < ) return;
  94. }
  95. id = d;
  96. for (int i = ; i <= tmp && i <= x; i++)
  97. dfs(i, , );
  98. }
  99.  
  100. bool isOK(char *str)
  101. {
  102. int sum = , len = strlen(str);
  103. if (len == && rec[] == ) return false;
  104. for (int i = ; i < len; i++)
  105. sum += str[i] - '';
  106. return !sum;
  107. }
  108.  
  109. void solve()
  110. {
  111.  
  112. for (int i = ; i < ; i++)
  113. {
  114. memcpy(cnt, rec, sizeof(rec));
  115. search(i);
  116. }
  117. if (isOK(ans)) printf("0\n");
  118. else if (flag) puts(ans);
  119. else printf("impossible\n");
  120. }
  121.  
  122. int main()
  123. {
  124. int cas;
  125. scanf("%d", &cas);
  126. for (int i = ; i <= cas; i++)
  127. {
  128.  
  129. init();
  130. printf("Case %d: ", i);
  131. solve();
  132. }
  133. return ;
  134. }

FZU 1912 Divisibility by Thirty-six(整除问题+字符串维护+贪心)的更多相关文章

  1. FZU Problem 1895 整除45问题(整除问题+字符串维护+优化)

    这个题有点烧脑啊,但是只要想清楚被45整除的数,肯定能被5和9整除,能被9整除的数各位加起来肯定是9的倍数,能被5整除的末尾是0或5. 然后dfs的过程稍微不太好懂,还有几个优化必须要注意.dfs的过 ...

  2. 从英文变形规则计算到Restful Api设计

    ➠更多技术干货请戳:听云博客 一天在研究Restful API设计,命名的时候我总是很纠结,我相信大多数人也有这种感觉,不是说想不出来某个单词怎么写的问题,像我这种没事背单词背到13000词量的人也要 ...

  3. 将十六进制的字符串转化为UIImage

    最近写一个项目,有验证码,但是接口返回的并不是验证码图片的URL,而是返回的字节数组16进制字符串.这样就需要把16进制字符串首先字节数组,其次再把字节数组转化为NSData,最后再把NSData转化 ...

  4. IOS 验证码

    将十六进制的字符串转化为UIImage 最近写一个项目,有验证码,但是接口返回的并不是验证码图片的URL,而是返回的字节数组16进制字符串.这样就需要把16进制字符串首先字节数组,其次再把字节数组转化 ...

  5. HDU 5776 sum (模拟)

    sum 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5776 Description Given a sequence, you're asked ...

  6. 变量,if.elif .else判断

    一,计算机的了解 基本组成:主板+cpu+内存 cpu: 主频, 核数(16) 内存:大小(8G, 16G, 32G) 型号: DDR3, DDR4, DDR5,  主频(海盗船,玩家国度)      ...

  7. python学习之老男孩python全栈第九期_day001知识点总结

    1. Python2与Python3的区别: Python2:源码不标准,混乱,重复代码太多: Python3:统一标准,去除重复代码. 编码方式: python2的默认编码方式为ASCII码:pyt ...

  8. 第一天-python基础

    每一个今天的坚持都会改变明天的自己! 一.python介绍 python是一门由解释型.弱类型的高级开发编程语言,由龟叔于1989圣诞开发出,后经过二十多年的发展,因其简洁高效的特点而被广泛使用,在世 ...

  9. 洛谷——P1988 火炬

    P1988 火炬 题目描述 2008北京奥运会,你想成为四川汶川的一名火炬手,经过层层选拔,终于到了最后一关,这一关是一道很难的题:任意给定一个正整数N(N<=100000),求一个最小的正整数 ...

随机推荐

  1. html的表单表格...

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. 一些css3的特效 javascript的window对象 定时器 延时器等ing...

    风车转动代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> < ...

  3. Gentoo网络配置

    网卡识别配置 要开始配置你的网卡,你首先需要告诉Gentoo RC系统你的网卡. 可以用ifconfig命令查看自己网卡名字: ifconfig -a 网卡名字(如eth0)的识别是通过在/etc/i ...

  4. 获取 Windows 任务栏 Rect

    获取当前Windows系统的任务栏尺寸 1: RECT rect; 2: HWND hwndTaskbar = FindWindow(TEXT("Shell_TrayWnd"), ...

  5. 大数据除法(Large data division)

    题目描述 Description 除法是计算中的基础运算,虽然规则简单,但是位数太多了,也难免会出错.现在的问题是:给定任意位数(足够大就可以啦O(∩_∩)O)的一个被除数,再给定一个long lon ...

  6. tomcat容器启动的启动过程(三)

    Catalina的start方法 /** * Start a new server instance. */ public void start() { if (server == null) { l ...

  7. kvstore之memcached为存储介质

    ecstore中kvstore选用memcached作为存储介质 kvstore存储类选用base_kvstore_memcached(app/base/lib/kvstore/memcached.p ...

  8. offset()值不准问题

    本来应该只需获取含图片的div的offset(),然后将标签div的坐标设置好即可,但是不知为何越靠后的div的offset().top越不正常,跟标准值偏离的越来越大. 即使你在$(document ...

  9. Java--重载与重写

    父类(Parent): public class Parent { public String name = "parent 父类属性"; public void say(){ S ...

  10. KVM 虚拟机基本管理及常用命令

    KVM的基本管理 1.查看KVM虚拟机配置文件 #Kvm虚拟机默认配置文件位置 [root@kvm qemu]# pwd /etc/libvirt/qemu [root@kvm qemu]# ll t ...