ZR#989
ZR#989
先吐槽一下这个ZZ出题人,卡哈希表。
我就不写那个能过的类高精了,直接写哈希的题解
解法:
判断两个数相加结果是否等于第三个数, 可以直接用 hash判断.
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
#define LL long long
const int N = 1e5 + 100;
struct hash {
int base, mod;
int cnt, Hash[N], num[N];
hash() {
cnt = 0,num[0] = 1;
base = 10,mod = 1e9 + 7;
}
void init() {cnt = 0;}
void insert(int c) {
cnt++;
Hash[cnt] = (1LL * Hash[cnt - 1] * base + c) % mod;
num[cnt] = (1LL * num[cnt - 1] * base) % mod;
}
int query(int l, int r) {
if(l == 1) return Hash[r];
return (Hash[r] - (1LL * Hash[l - 1] * num[r - l + 1] % mod) + mod) % mod;
}
friend bool check(hash &ch, int l1, int r1,hash &b, int l2, int r2, hash &c, int l3, int r3) {
if((ch.query(l1, r1) + b.query(l2, r2)) % ch.mod != c.query(l3, r3)) return false;
return true;
}
}Hash[4];
char ch[4][N];
int len[4], oldlen[4],T;
int main() {
scanf("%d",&T);
while(T--) {
scanf("%s%s%s", ch[1] + 1, ch[2] + 1, ch[3] + 1);
for(int i = 1 ; i <= 3 ; i++) {
oldlen[i] = len[i] = strlen(ch[i] + 1);
Hash[i].init();
}
for(int i = 1 ; i <= 3 ; i++) {
for(int j = 1 ; j <= len[i] ; j++) {
Hash[i].insert(ch[i][j] - '0');
}
}
int x = 0, y = 0, z = 0;
while(len[3] <= max(len[1], len[2]) + 1) {
z++;
ch[3][++len[3]] = '0';
Hash[3].insert(0);
}
while(len[1] < len[3]) {
ch[1][++len[1]] = '0';
Hash[1].insert(0);
}
while(len[2] < len[3]) {
ch[2][++len[2]] = '0';
Hash[2].insert(0);
}
bool flag = 1;
for(int i = oldlen[1]; i <= len[1] && flag; i++) {
if(check(Hash[1], 1, i, Hash[2], 1, len[2] - 1, Hash[3], 1, len[3])) {
flag = 0;
x = i - oldlen[1];
y = len[2] - 1 - oldlen[2];
break;
}
if(check(Hash[1], 1, i, Hash[2], 1, len[2], Hash[3], 1, len[3])) {
flag = 0;
x = i - oldlen[1];
y = len[2] - oldlen[2];
break;
}
}
for(int i = oldlen[2]; i <= len[2] && flag; i++) {
if(check(Hash[1], 1, len[1] - 1, Hash[2], 1, i, Hash[3], 1, len[3])) {
flag = 0;
x = len[1] - 1 - oldlen[1];
y = i - oldlen[2];
break;
}
if(check(Hash[1], 1, len[1], Hash[2], 1, i, Hash[3], 1, len[3])) {
flag = 0;
x = len[1] - oldlen[1];
y = i - oldlen[2];
break;
}
}
if(flag) puts("-1");
else printf("%d %d %d\n", x, y, z);
}
//system("pause");
return 0;
}
ZR#989的更多相关文章
- 【LEETCODE】53、数组分类,简单级别,题目:989、674、1018、724、840、747
真的感觉有点难... 这还是简单级别... 我也是醉了 package y2019.Algorithm.array; import java.math.BigDecimal; import java. ...
- ZR#1005
ZR#1005 解法: 题解给了一个建图跑最短路的做法,但好像没有必要,因为 $ m $ 没有用,所以直接上完全背包就行了. CODE: #include<iostream> #inclu ...
- ZR#1004
ZR#1004 解法: 对于 $ (x^2 + y)^2 \equiv (x^2 - y)^2 + 1 \pmod p $ 化简并整理得 $ 4x^2y \equiv 1 \pmod p $ 即 $ ...
- ZR#1009
ZR#1009 解法: 因为无敌的SR给了一个大暴力算法,所以通过打表发现了了一些神奇的性质,即第一行和第一列的对应位置数值相等. 我们可以通过手算得出 $ F(n) = \frac{n(n + 1) ...
- ZR#1008
ZR#1008 解法: 直接预处理出来执行完一个完整的串可以到达的位置,然后算出重复的次数直接乘在坐标上,最后处理一下余下的部分就行了. CODE: #include<iostream> ...
- ZR#1015
ZR#1015 解法: 我们需要求得, $ g_i $ 表示长度为的最长不下降子序列个数. 设 $ f_{i,j} $ 表示统计第前$ i $ 个数字,得到最长不下降子序列末端为 $ j $ . 显然 ...
- ZR#1012
## ZR#1012 blog咕咕咕了好久,开始补. 解法: 一个很显然的性质, $ x $ 只能转移到 $ x+1 $ 或者 $ 2x $ 处,所以我们可以以此性质建图,即 $ x $ 向 $ x ...
- ZR#985
ZR#985 解法: 可以先假设每个区间中所有颜色都出现,然后减掉多算的答案.对每种颜色记录它出现的位置,则相邻两个位置间的所有区间都要减去,时间复杂度 $ O(n) $ . 其实可以理解为加法原理的 ...
- ZR#984
ZR#984 解法: 异或的一个性质: $ a+b \geq a \bigoplus b$ 所以一边读入一边把读进来的值加到答案就行了. #include<iostream> #inclu ...
随机推荐
- Java调用WebService方法总结(9,end)--Http方式调用WebService
Http方式调用WebService,直接发送soap消息到服务端,然后自己解析服务端返回的结果,这种方式比较简单粗暴,也很好用:soap消息可以通过SoapUI来生成,也很方便.文中所使用到的软件版 ...
- iOS - WWDC18 iOS 自动生成强密码和自动填充验证码/密码
本文将介绍WWDC18 Automatic Strong Passwords and Security Code Autofill和WWDC17 Introducing Password AutoFi ...
- flutter报错--ProcessException: Process... gradlew.bat ...exited abnormally
在 VScode 中 debug flutter 是遇到如下问题: ProcessException: Process "G:\demo\flutter\hello_word\android ...
- 使用ranger替代资源浏览器
使用方法参考,这个是比较高校的: http://www.mikewootc.com/wiki/linux/usage/ranger_file_manager.html
- Linux命令——e2fsck
简介 e2fsck字面意义上理解时,Ext2 FileSystem Check,但他实际上不仅仅对Ext2有用,对Ext家族都有用,即Ext2/3/4d都也可以使用. 5 UNIX / Linux e ...
- Linux系统运维相关的面试题 (问答题)
这里给大家整理了一些Linux系统运维相关的面试题,有些问题没有标准答案,希望要去参加Linux运维面试的朋友,可以先思考下这些问题. 一.Linux操作系统知识 1.常见的Linux发行版本都有 ...
- acrobat 导出300dpi图片
文件-导出-图象-jpeg 设置 分辨率118.11像素/厘米
- idea 模板
/** * @author sharplee * @version 1.0.0 * @ClassName ${PACKAGE_NAME}.${NAME} * @Description * @creat ...
- Spring boot集成Websocket,前端监听心跳实现
第一:引入jar 由于项目是springboot的项目所以我这边简单的应用了springboot自带的socket jar <dependency> <groupId>org. ...
- HDU-2204-Eddy's爱好-容斥求n以内有多少个数形如M^K
HDU-2204-Eddy's爱好-容斥求n以内有多少个数形如M^K [Problem Description] 略 [Solution] 对于一个指数\(k\),找到一个最大的\(m\)使得\(m^ ...