ACM-ICPC 2018 青岛赛区现场赛 D. Magic Multiplication && ZOJ 4061 (思维+构造)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4061
题意:定义一个长度为 n 的序列 a1,a2,..,an 和长度为 m 的序列 b1,b2,..,bm 所构成的新序列 c 为 a1b1,a1b2,....,anbm,给出最终的序列和两个初始序列的长度,构造出字典序最小的初始序列。
题解:首先我们知道两个个位数相乘最多可以得到两位数,易知最终序列的第一个数字 c1 的构造一定有 a1 的参与,当 a1 <= c1 时或者 c1 == 0时,a1 * b1 必须为个位数;否则 a1 * b1 必须为两位数,容易证明其正确性。有了这个性质以后,可以通过枚举 a1 得到完整的 b 序列,然后通过 b 序列再得出 a 序列。
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define mst(a,b) memset((a),(b),sizeof(a))
#define mp(a,b) make_pair(a,b)
#define pi acos(-1)
#define pii pair<int,int>
#define pb push_back
const int INF = 0x3f3f3f3f;
const double eps = 1e-;
const int MAXN = 2e5 + ;
const int MAXM = 1e8 + ;
const ll mod = 1e9 + ; int n,m,len;
char s[MAXN];
int a[MAXN],b[MAXN],now[MAXN],pos;
bool flag; bool geta() {
for(int i = ; i <= n; i++) {
int num = s[++pos];
if(b[] > num && num != ) num = num * + s[++pos];
if(num % b[] || num / b[] >= ) return false;
a[i] = num / b[];
for(int j = ; j <= m; j++) {
num = s[++pos];
if(a[i] > num && num != ) num = num * + s[++pos];
if(a[i] * b[j] != num) return false;
}
}
if(pos != len) return false;
return true;
} bool getb() {
pos = ;
for(int i = ; i <= m; i++) {
int num = s[++pos];
if(a[] > num && num != ) num = num * + s[++pos];
if(num % a[] || num / a[] >= ) return false;
b[i] = num / a[];
}
return true;
} int main() {
#ifdef local
freopen("data.txt", "r", stdin);
// freopen("data.txt", "w", stdout);
#endif
int t;
scanf("%d",&t);
while(t--) {
scanf("%d%d%s",&n,&m,s + );
len = strlen(s + );
for(int i = ; i <= len; i++) s[i] = s[i] - '';
flag = false;
for(int i = ; i <= ; i++) {
if(s[] % i == ) {
a[] = i;
if(getb() && geta()) {
flag = true;
break;
}
}
}
if(!flag) {
for(int i = ; i <= ; i++) {
if((s[] * + s[]) % i == ) {
a[] = i;
if(getb() && geta()) {
flag = true;
break;
}
}
}
}
if(flag) {
for(int i = ; i <= n; i++) printf("%d",a[i]);
printf(" ");
for(int i = ; i <= m; i++) printf("%d",b[i]);
printf("\n");
} else puts("Impossible");
}
return ;
}
ACM-ICPC 2018 青岛赛区现场赛 D. Magic Multiplication && ZOJ 4061 (思维+构造)的更多相关文章
- 2016 ACM/ICPC亚洲区青岛站现场赛(部分题解)
摘要 本文主要列举并求解了2016 ACM/ICPC亚洲区青岛站现场赛的部分真题,着重介绍了各个题目的解题思路,结合详细的AC代码,意在熟悉青岛赛区的出题策略,以备战2018青岛站现场赛. HDU 5 ...
- ACM ICPC 2018 青岛赛区 部分金牌题题解(K,L,I,G)
目录: K Airdrop I Soldier Game L Sub-cycle Graph G Repair the Artwork ———————————————————— ps:楼主脑残有点严 ...
- ACM-ICPC 2018 青岛赛区现场赛 K. Airdrop && ZOJ 4068 (暴力)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4068 题意:吃鸡游戏简化为二维平面上有 n 个人 (xi,yi) ...
- HDU 4046 Panda (ACM ICPC 2011北京赛区网络赛)
HDU 4046 Panda (ACM ICPC 2011北京赛区网络赛) Panda Time Limit: 10000/4000 MS (Java/Others) Memory Limit: ...
- ICPC 2018 徐州赛区网络赛
ACM-ICPC 2018 徐州赛区网络赛 去年博客记录过这场比赛经历:该死的水题 一年过去了,不被水题卡了,但难题也没多做几道.水平微微有点长进. D. Easy Math 题意: ...
- ACM总结——2017ACM-ICPC北京赛区现场赛总结
现在距离比赛结束已经过了一个多星期了,也是终于有时间写下心得了.回来就是被压着做项目,也是够够的. 这次比赛一样是我和两个学弟(虽然是学弟,但我的实力才是最弱的T_T)一起参加的,成绩的话打铁,算是情 ...
- 2014ACM/ICPC亚洲区鞍山赛区现场赛1009Osu!
鞍山的签到题,求两点之间的距离除以时间的最大值.直接暴力过的. A - Osu! Time Limit:1000MS Memory Limit:262144KB 64bit IO Fo ...
- ACM-ICPC 2018 南京赛区现场赛 K. Kangaroo Puzzle (思维+构造)
题目链接:https://codeforc.es/gym/101981/attachments 题意:在 n * m 的平面上有若干个袋鼠和墙(1为袋鼠,0为墙),每次可以把所有袋鼠整体往一个方向移动 ...
- ACM-ICPC 2018 徐州赛区现场赛 I. Rikka with Sorting Networks (思维+DFS)
题目链接:https://codeforces.com/gym/102012/problem/I 题意:问有多少个 1 到 n 的排列,使得用给定的 k 个比较器(使 au 和 av 有序)排序后,整 ...
随机推荐
- 封装一个Model或者Vender类
Model <?php /** * User: Eden * Date: 2019/3/21 * 共有内容 */ class WxPayModel extends Model { protect ...
- Python开发【第五章】:常用模块
一.模块介绍: 1.模块定义 用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能),本质上就是.py结尾python文件 分类:内置模块.开源模块.自定义模块 2.导入模块 本质:导 ...
- 理解 is_callable
官方解释: (PHP 4 >= 4.0.6, PHP 5, PHP 7) is_callable — 检测参数是否为合法的可调用结构. 说明 is_callable ( callable $na ...
- SAS学习笔记45 宏系统选项及其他
关于宏的系统选项 MCOMPILENOTE=NONE|NOAUTOCALL|ALL 该系统选项控制是否在日志当中显示宏程序编译时的信息,默认值为NONE,也就是不显示.其中NOAUTOCALL针对的是 ...
- kubernetes核心组件kube-proxy
一. kube-proxy 和 service kube-proxy是Kubernetes的核心组件,部署在每个Node节点上,它是实现Kubernetes Service的通信与负载均衡机制的重 ...
- (三十)JSP标签之自定义标签
创建一个类,引入外部jsp-api.jar包(在tomcat 下lib包里有),这个类继承SimpleTagSupport 重写doTag()方法. jspprojec包下的helloTag类: 1 ...
- Spring 后台方法 重定向 与 转发
一.重定向:重定向是客户端行为,在使用时,务必使用全路径,否则可能因为外部环境导致错误 1.URL改变为重定向的URL地址 2.前台页面不能使用Ajax请求提交, 应该使用form表单提交 方法一.参 ...
- android 仿微信朋友圈图片选择控件
调用方式(布局文件就是一个自定义控件): private ArrayList<String> selectedImages; @BindView(R.id.imagePicker) Ima ...
- C++万能头文件<bits/stdc++.h>的内容与优缺点
最近发现了一个C++的头文件bits/stdc++.h,听说这是一个几乎包含了所有C++库函数的头文件,就想更深入的了解一下,下面是头文件内容 // C++ includes used for pre ...
- 安装Docker step by step
1. 系统要求 centos7以上 使用cat /etc/redhat-release查看系统版本,我的Centos 7.6 centos-extra 仓库 enable,默认是打开的 2.安装d ...