【链接】 我是链接,点我呀:)

【题意】

【题解】

```cpp
/*
for a[1] from 1~9
1*1=1 2*1=2 3*1=3
1*2=2 2*2=4 3*2=6
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12
1*5=5 2*5=10 3*5=15
1*6=6 2*6=12 3*6=18
1*7=7 2*7=14 3*7=21
1*8=8 2*8=16 3*8=24
1*9=9 2*9=18 3*9=27
use "c[i]" or "c[i]c[i+1]" % a[1]
if (c[i]%a[1]==0) then b[i] must be c[i]/a[1]
else if (c[i]c[i+1]%a[i]==0) b[i] must be c[i]c[i+1]/a[1]
they won't be true at the same time.
Because,when x*y>=10,x*y%10 10
so,c[i]=c[i]c[i+1]%10=10 even though c[i]c[i+1]%a[1]==0
```

【代码】

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int N = 2e5;
  4. int n,m,l;
  5. char s[N+10];
  6. int a[N+10],b[N+10],c[N+10];
  7. bool test(int a1){
  8. a[1] = a1;
  9. //get string b
  10. int cur = 1;
  11. for (int i = 1;i <= m;i++){//for b's each position
  12. if (cur>l) return false;
  13. //break limit,unaccpted
  14. if (c[cur]%a1==0){//only one position
  15. b[i] = c[cur]/a1;//get b[i]
  16. cur++;
  17. }else if (cur+1<=l && (c[cur]*10+c[cur+1])%a1==0){//twoposition
  18. b[i] = (c[cur]*10+c[cur+1])/a1;//get b[i]
  19. if (b[i]>=10) return false;
  20. cur+=2;
  21. }else return false;//no accpted
  22. }
  23. //use b and c,get string a
  24. for (int i = 2;i <= n;i++){
  25. if (cur>l) return false;
  26. if (c[cur]%b[1]==0){
  27. a[i] = c[cur]/b[1];
  28. cur++;
  29. }else if (cur+1<=l && (c[cur]*10+c[cur+1])%b[1]==0) {
  30. a[i] = (c[cur]*10+c[cur+1])/b[1];
  31. if (a[i]>=10) return false;
  32. cur+=2;
  33. }else return false;
  34. //got a[i]
  35. //use a[i] to check c[cur],c[cur+1]....
  36. for (int j = 2;j <= m;j++){
  37. if (cur>l) return false;
  38. int _ju = a[i]*b[j];
  39. //if (a1==2) printf("%d\n",_ju);
  40. if (_ju<=9 && c[cur]==_ju){
  41. cur++;
  42. }else if ( _ju>=10 && c[cur]==(_ju/10) && cur+1<=l &&
  43. c[cur+1]==(_ju%10) ) cur+=2;
  44. else return false;
  45. }
  46. }
  47. //
  48. if (cur!=l+1) return false;
  49. return true;
  50. }
  51. int main(){
  52. // freopen("rush.txt","r",stdin);
  53. int T;
  54. scanf("%d",&T);
  55. while (T--){
  56. scanf("%d%d",&n,&m);
  57. scanf("%s",s+1);
  58. l = strlen(s+1);
  59. for (int i = 1;i <= l;i++) c[i] = s[i]-'0';
  60. int ok = 0;
  61. for (int i = 1;i <= 9;i++)
  62. if (test(i)){
  63. ok = 1;
  64. break;
  65. }
  66. if (ok==0){
  67. puts("Impossible");
  68. }else{
  69. for (int i = 1;i <= n;i++) printf("%d",a[i]);printf(" ");
  70. for (int i = 1;i <= m;i++) printf("%d",b[i]);
  71. puts("");
  72. }
  73. }
  74. return 0;
  75. }

【Zoj 4061】Magic Multiplication的更多相关文章

  1. 【hdu 1517】A Multiplication Game

    Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s) ...

  2. 【ZOJ4061】Magic Multiplication(构造)

    题意:定义一个新运算为两个数A,B上每一位相乘,然后顺次接在一起,现在给定结果C和原来两个数字的长度,要求恢复成原来的数字A,B 若有多解输出A字典序最小的,A相同输出B字典序最小的,无解输出Impo ...

  3. 【Codeforces 1117C】Magic Ship

    [链接] 我是链接,点我呀:) [题意] 题意 [题解] 我们可以把这个行船的过程分解成两个过程 1.船经过时间t被风吹到了某个地方 2.船用这t时间尝试到达终点(x2,y2) 会发现如果时间t能最终 ...

  4. 【ZOJ 4070】Function and Function

    [链接] 我是链接,点我呀:) [题意] [题解] 递归一会. 会发现最后肯定是0,1一直循环. 开始循环之后就直接返回结果就好. [代码] #include <bits/stdc++.h> ...

  5. 【ZOJ 4060】Flippy Sequence

    [链接] 我是链接,点我呀:) [题意] [题解] 按照两个区间的排列方式 我们可以分成以下几种情况 会发现这两个区间的作用 最多只能把两段连续不同的区间变为相同. 那么写个for处理出连续不相同的一 ...

  6. 【ZOJ 4067】Books

    [链接] 我是链接,点我呀:) [题意] [题解] 统计a中0的个数cnt0 然后m减去cnt0 因为这cnt0个0是一定会取到的. 如果m==0了 那么直接找到数组中的最小值mi 输出mi-1就好 ...

  7. 【ZOJ 4062】Plants vs. Zombies

    [链接] 我是链接,点我呀:) [题意] [题解] 二分最后的最大抵御值mid. 然后对于每个蘑菇. 都能算出来它要浇水几次mid/ai 然后如果第i个蘑菇没浇水达到要求次数. 就在i和i+1之间来回 ...

  8. 【ZOJ 3200】Police and Thief

    ZOJ 3200 首先我写了个高斯消元,但是消出来了一些奇怪的东西,我就放弃了... 然后只好考虑dp:\(dp[i][j][k]\)表示走到了第i步,到了\((j,k)\)这个节点的概率. 那么答案 ...

  9. 【ZOJ 3463】Piano

    ZOJ 3463 题意:有一个钢琴,一个人把左手放在L位置上,右手放在R位置上,要弹某\(n\)个键,每个手最多能够得着9个位置,并且两只手不能交叉.把手移动的代价是大拇指移动的距离的平方根.问弹完这 ...

随机推荐

  1. Mongodb---记一次事故故障

    2014.06.19.001---故障报告 事故发生时间 事故简述 事故责任方 是否解决 19:21-20:15 IISserverD盘即将溢出 是 一.事故描写叙述: 在19:21收到警报.显示II ...

  2. Buildroot构建指南——工具链【转】

    本文转载自:http://blog.csdn.net/zhou_chenz/article/details/52346134 Linux系统的交叉编译工具链用来将源代码变成bin文件或者库文件的一个软 ...

  3. UESTC--1253--阿里巴巴和n个大盗 (博弈)

     阿里巴巴和n个大盗 Time Limit: 1000MS   Memory Limit: 65535KB   64bit IO Format: %lld & %llu Submit St ...

  4. Java中继承,类的高级概念的知识点

    1. 继承含义 在面向对象编程中,可以通过扩展一个已有的类,并继承该类的属性和行为,来创建一个新的类,这种方式称为继承(inheritance). 2. 继承的优点 A.代码的可重用性 B.子类可以扩 ...

  5. Java中数组要点总结

    1.数组是基本数据类型和字符串类型的容器(引用数据类型),而集合是类数据类型的容器: 2.数组定义的格式: (1)一般格式: 元素类型[] 数组名 = new 元素类型[元素个数或者数组长度]: 其中 ...

  6. Coursera公开课-Machine_learing:编程作业6

    Support Vector Machines I have some issues to state. First, there were some bugs in original code wh ...

  7. 5.26 Quartz任务调度图解

  8. 附加MySQL数据库的方法

    下面讲解附加MySQL数据库的方法. (1)将“光盘\Code\04\Project\数据库”文件夹中的扩展名为.sql的文件拷贝到本地机器中. (2)在如图1所示的MySQL工作台界面中,单击Dat ...

  9. UID卡、CUID卡、FUID卡的区别

    UID卡(国外称GEN1) 所有区块可被重复读写 卡片ID可改且使用后门指令更改ID ID可被重复修改 响应后门指令(意味着可被使用后门指令检测是否为克隆卡的机器发现) CUID卡(国外称GEN2) ...

  10. c# cookie帮助类

    using System; using System.Collections.Generic; using System.Text; using System.Web; namespace Matic ...