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

【题意】

【题解】

```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. [odroid-pc] ubuntu12.04 android4.0移植到odroid-pc过程

    參考:http://blog.csdn.net/sunnybeike/article/details/8098349 odroid  prebuilt版 img下载地址:tag=ODROID-PC&q ...

  2. hdu 5094 Maze bfs

    传送门:上海邀请赛E 给定一个n×m的迷宫,给出相邻格子之间的墙或者门的信息,墙说明不可走,假设是门则须要有相应的钥匙才干通过,问是否可以从(1,1)到达(n,m) 一个带状态的bfs,再另记一个状态 ...

  3. 开发DataSnapserver

     在上次的文章中讨论了怎样把传统的Delphi 主从架构应用程序逐渐转换为DataSnap JSONserver.在本篇文章中让我们正式讨论怎样使用Delphi XE开发DataSnap/REST ...

  4. HDU5489 LIS变形

    Removed Interval Problem Description Given a sequence of numbers A=a1,a2,…,aN , a subsequence b1,b2, ...

  5. PCB 一键远程桌面+RDP文件生成

    最近在写个内网INCAM内网授权工具中,在服务端监听客户端请求后,后台自动处理客户端请求并远程客户端 这里记录3个点. 一.运行RDP文件后,正常会有下图2个弹窗,怎么可以关闭这2个弹窗呢, 通过模拟 ...

  6. Docker For MYSQL 8.0 特别注意修复数据库新的验证方式

    从Docker登录MySQL的终端 docker exec -it wordpress-mysql /bin/bash 登录数据库 mysql -u root -p 使用MYSQL数据库 use my ...

  7. JavaScript中变速运动的数学模型构建

    AB两地直线距离相距为S,机器人β从A点向B点行进.已知机器人β的每间隔固定时间行进一段路程,其下次行进的距离为当前距离B点路程的1/q(q为正整数),求机器人第n次行进距离的表达式an以及前n项和公 ...

  8. Java多线程技术-wait/notify/join

    wait/notify的作用 wait()方法的作用是使当前执行代码的线程进行等待,wait()是Object类的方法,用来将当前线程置入预执行队列中,并且在wait()所在的代码处停止执行,直到接到 ...

  9. Cracking the Coding Interview 4.8

    You are given a binary tree in which each node contains a value. Design an algorithm to print all pa ...

  10. 利用 Puppet 实现自动化管理配置 Linux 计算机集群

    随着虚拟化和云计算技术的兴起,计算机集群的自动化管理和配置成为了数据中心运维管理的热点.对于 IaaS.Paas.Saas 来说,随着业务需求的提升,后台计算机集群的数量也会线性增加.对于数据中心的运 ...