【Zoj 4061】Magic Multiplication
【链接】 我是链接,点我呀:)
【题意】
【题解】
```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的更多相关文章
- 【hdu 1517】A Multiplication Game
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s) ...
- 【ZOJ4061】Magic Multiplication(构造)
题意:定义一个新运算为两个数A,B上每一位相乘,然后顺次接在一起,现在给定结果C和原来两个数字的长度,要求恢复成原来的数字A,B 若有多解输出A字典序最小的,A相同输出B字典序最小的,无解输出Impo ...
- 【Codeforces 1117C】Magic Ship
[链接] 我是链接,点我呀:) [题意] 题意 [题解] 我们可以把这个行船的过程分解成两个过程 1.船经过时间t被风吹到了某个地方 2.船用这t时间尝试到达终点(x2,y2) 会发现如果时间t能最终 ...
- 【ZOJ 4070】Function and Function
[链接] 我是链接,点我呀:) [题意] [题解] 递归一会. 会发现最后肯定是0,1一直循环. 开始循环之后就直接返回结果就好. [代码] #include <bits/stdc++.h> ...
- 【ZOJ 4060】Flippy Sequence
[链接] 我是链接,点我呀:) [题意] [题解] 按照两个区间的排列方式 我们可以分成以下几种情况 会发现这两个区间的作用 最多只能把两段连续不同的区间变为相同. 那么写个for处理出连续不相同的一 ...
- 【ZOJ 4067】Books
[链接] 我是链接,点我呀:) [题意] [题解] 统计a中0的个数cnt0 然后m减去cnt0 因为这cnt0个0是一定会取到的. 如果m==0了 那么直接找到数组中的最小值mi 输出mi-1就好 ...
- 【ZOJ 4062】Plants vs. Zombies
[链接] 我是链接,点我呀:) [题意] [题解] 二分最后的最大抵御值mid. 然后对于每个蘑菇. 都能算出来它要浇水几次mid/ai 然后如果第i个蘑菇没浇水达到要求次数. 就在i和i+1之间来回 ...
- 【ZOJ 3200】Police and Thief
ZOJ 3200 首先我写了个高斯消元,但是消出来了一些奇怪的东西,我就放弃了... 然后只好考虑dp:\(dp[i][j][k]\)表示走到了第i步,到了\((j,k)\)这个节点的概率. 那么答案 ...
- 【ZOJ 3463】Piano
ZOJ 3463 题意:有一个钢琴,一个人把左手放在L位置上,右手放在R位置上,要弹某\(n\)个键,每个手最多能够得着9个位置,并且两只手不能交叉.把手移动的代价是大拇指移动的距离的平方根.问弹完这 ...
随机推荐
- BZOJ 2048 2009国家集训队 书堆 数学算法
题目大意:经典的物理上的桌边堆书问题,初中物理老师以前还讲过,只是仅仅记住了结论. . . 没关系,简单证明一下就好 首先我们设由上至下第i本书比它以下那本书多伸出去的长度为a[i],前缀和为s[i] ...
- mysql数据库操作(3)
1.在查询结果中不显示重复记录 查询时不显示重复记录主要应用了 DISTINCT 关键字,该关键字用于删除重复记录. 在实现查询操作时,如果查询的选择列表中包含一个表的主键,那么每个查询中的记录都将是 ...
- UESTC--758--P酱的冒险旅途(模拟)
P酱的冒险旅途 Time Limit: 1000MS Memory Limit: 65535KB 64bit IO Format: %lld & %llu Submit Status ...
- [NOI 2003] 逃学的小孩
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1509 [算法] 树的直径 [代码] #include<bits/stdc++. ...
- java-com-util-common-service:BaseService.java
ylbtech-java-com-util-common-service:BaseService.java 1.返回顶部 1. package com.shineyoo.manager.util.co ...
- Spark之MLlib
目录 Part VI. Advanced Analytics and Machine Learning Advanced Analytics and Machine Learning Overview ...
- PCB MS SQL 将字符串分割为表变量(表值函数)
Create FUNCTION [dbo].[SplitTable]( @s varchar(max), --待分拆的字符串 ) --数据分隔符 ),), col varchar(max)) --建立 ...
- Python 39 数据库的数据类型
一:整型 为什么需要 数据分类? 1.为了描述事物更加准确 2.描述起来更方便 3.节省内存空间 例:1 a 你 utf8 下 5个字节 1 a b c unicode 6个字节 mysq ...
- 关于Vue.js去掉#号路由
正常启动后访问路由: 中间会自动加入一个#号 去掉#号: 在route文件夹下的index.js中加入mode: 'history', ①: ②: 关于mode说明: 默认值: ‘hash‘(浏览器) ...
- Picked up JAVA_TOOL_OPTIONS: -agentlib:jvmhook解决方法
有时候电脑中进行Java -version相关的操作时,会出现Picked up JAVA_TOOL_OPTIONS: -agentlib:jvmhook提示信息,尽管这些提示信息不影响JDK的正常使 ...