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 ...
随机推荐
- Python 3 MySQL数据库操作
import pymysql class Mysql_db(): def __init__(self,ip,username,password,db_name,table_name): self.ip ...
- kubernetes第九章--管理机密信息
- Git提交代码解决方案
最近做项目不再用小乌龟了,开始用git,便做了记录如下,后期可以看看自己是怎么使用的 下载安装就不说了,直接进入使用环节. 1.使用规则 git pull origin master 和 gi ...
- win10远程桌面 CredSSP加密Oracle修正的解决办法
小编在登录远程桌面的时候一直显示由于CredSSP加密Oracle修正 的警告,连接不上.最终通过以下办法解决了 首先点击windows+R键 输入gpedit.msc,点击确定. 然后依次选择:计算 ...
- UCOSIII事件标志组
两种同步机制 "或"同步 "与"同步 使能 #define OS_CFG_FLAG_EN 1u /* Enable (1) or Disable (0) cod ...
- linux设备模型与内核中的面向对象思想
linux内核用C语言实现了C++面向对象的大部分特性:封装,继承,多态.在看内核的过程中,开始追寻其中的设计思想,封装.继承.多态.恰好今天又在看Linux设备模型,找了很多资料.总结如下: 1.l ...
- HTML&CSS基础-外边框
HTML&CSS基础-外边框 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.HTML <!DOCTYPE html> <html> <h ...
- jQuery + ashx 实现图片按比例预览、异步上传及显示
目录(?)[-] 注ajax 方式异步读取数据库显示图片的方法同上传一致使用 ashx 返回base64字符串在客户端处理即可 记录一个让我纠结良久的问题 在Page_Load 函数中只有第一个用 S ...
- LeetCode初级算法--字符串02:字符串中的第一个唯一字符
LeetCode初级算法--字符串02:字符串中的第一个唯一字符 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog. ...
- error: invalid-first-character-of-tag-name错误解决方案
HTML 特殊字符写法要用原始码,例如: ‘<’ 原始码为 < ‘>’ 原始码为 > 解决示例: 原错误代码 <div><</div> 修改后代码 ...