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

【题意】

【题解】

```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
```

【代码】

#include <bits/stdc++.h>
using namespace std; const int N = 2e5; int n,m,l;
char s[N+10];
int a[N+10],b[N+10],c[N+10]; bool test(int a1){
a[1] = a1; //get string b
int cur = 1;
for (int i = 1;i <= m;i++){//for b's each position
if (cur>l) return false;
//break limit,unaccpted
if (c[cur]%a1==0){//only one position
b[i] = c[cur]/a1;//get b[i]
cur++;
}else if (cur+1<=l && (c[cur]*10+c[cur+1])%a1==0){//twoposition
b[i] = (c[cur]*10+c[cur+1])/a1;//get b[i]
if (b[i]>=10) return false;
cur+=2;
}else return false;//no accpted
} //use b and c,get string a
for (int i = 2;i <= n;i++){
if (cur>l) return false; if (c[cur]%b[1]==0){
a[i] = c[cur]/b[1];
cur++;
}else if (cur+1<=l && (c[cur]*10+c[cur+1])%b[1]==0) {
a[i] = (c[cur]*10+c[cur+1])/b[1];
if (a[i]>=10) return false;
cur+=2;
}else return false; //got a[i] //use a[i] to check c[cur],c[cur+1]....
for (int j = 2;j <= m;j++){
if (cur>l) return false;
int _ju = a[i]*b[j];
//if (a1==2) printf("%d\n",_ju);
if (_ju<=9 && c[cur]==_ju){
cur++;
}else if ( _ju>=10 && c[cur]==(_ju/10) && cur+1<=l &&
c[cur+1]==(_ju%10) ) cur+=2;
else return false;
}
}
//
if (cur!=l+1) return false;
return true;
} int main(){
// freopen("rush.txt","r",stdin);
int T;
scanf("%d",&T);
while (T--){
scanf("%d%d",&n,&m);
scanf("%s",s+1);
l = strlen(s+1);
for (int i = 1;i <= l;i++) c[i] = s[i]-'0';
int ok = 0;
for (int i = 1;i <= 9;i++)
if (test(i)){
ok = 1;
break;
}
if (ok==0){
puts("Impossible");
}else{
for (int i = 1;i <= n;i++) printf("%d",a[i]);printf(" ");
for (int i = 1;i <= m;i++) printf("%d",b[i]);
puts("");
}
}
return 0;
}

【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. js获取单独一个checkbox是否被选中

    <script language=javascript> function check(){ var xz=document.getElementById("xz"); ...

  2. javascript 打印函数名称和被引用的函数

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. IOS 京东相关app 出现“网络请求失败,请检查您的网络设置”的解决办法

    问题情况 在IOS系统下,下载安装或者更新新版的京东相关app之后,打开app直接就是“网络请求失败,请检查网络设置”,无论是数据连接还是wifi都试了,都是网络请求失败. 然而打开无线局域网-使用无 ...

  4. u-boot的内存分布和全局数据结构

    U-boot,除非在RAM中调试,一般情况下都是从flash中执行一段代码,然后将flash中储存的代码和数据搬移到ram中,然后跳转到ram中执行.当然这应该也是一般的bootloader的执行方式 ...

  5. android在学习——activity关闭和dialog.dismiss冲突的解决(Activity has leaked window com.android.internal.policy.impl.PhoneWindow)

    当我们在退出整个程序的时候偶尔会出现这种报错:Activity has leaked window com.android.internal.policy.impl.PhoneWindow 其意思大概 ...

  6. MVC + Redis

    net MVC + Redis(hash入库+log4net集成) https://www.cnblogs.com/hoyu/p/9063675.html 博客四元素 既然要写一个博客类的网站,那就应 ...

  7. 二维矩阵相乘 in C++

    #include <iostream> #include <vector> #include <string> #include <sstream> # ...

  8. PCB Genesis增加点阵字 实现原理

    我们采用Genesis增加点阵字时,用Genesis增加Canned Text即可,但奥宝中文不支持,且字符种类是有限的呀 不过没关系,没有自己造呀.在这里我分享一种增加点阵字的实现方法 一.通过代码 ...

  9. E20170829-mk

    Parse   vt. 从语法上描述或分析(词句等); serial    adj. 连续的; 连载的; 顺序排列的; 分期偿付的; MultiThread n. 多线程; 多流; concurren ...

  10. 树莓派-USB存储设备自动挂载

    简单介绍实现命令行下USB存储设备自动挂载的方法,Linux gnome/kde窗口环境下有移动存储的管理程序,可以实现自动挂载移动存储设备,但是在命令行下 通常需要用mount命令手动挂载USB存储 ...