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 ...
随机推荐
- 阿里云OSS上传文件本地调试跨域问题解决
问题描述: 最近后台说为了提高上传效率,要前端直接上传文件到阿里云,而不经过后台.因为在阿里云服务器设置的允许源(region)为某个固定的域名下的源(例如*.cheche.com),直接在本地访问会 ...
- WIN7U X64环境下的SQL SERVER 2008R2的防火墙配置
测试需要,备忘. CMD下运行,可以把sql server 要用的端口都开好. netsh advfirewall firewall add rule name = SQLPort dir = in ...
- p2.BTC-数据结构
hash pointers:哈希指针,除了保存值的地址,还要存这整个区块的内容的hash值.这样就既能访问到值,还能确定访问的值有没有被篡改. 一 Blockchain Block chain is ...
- centos7小命令
修改时区:timedate [root@centos2 ~]# timedatectl set-timezone Asia/Shanghai 修改语言:localectl [root@centos2 ...
- docker版本lnmp
也不是全部的docker,比如php-fpm,这个可以用docker版. 但第三方插件就不灵活,所以原生的就好. 另外,在建设ftp服务时,以后要弃vsftpd而选用pure-ftp了. pure-f ...
- 小程序框架之视图层 View~事件系统~WXS响应事件
WXS响应事件 基础库 2.4.4 开始支持,低版本需做兼容处理. 背景 有频繁用户交互的效果在小程序上表现是比较卡顿的,例如页面有 2 个元素 A 和 B,用户在 A 上做 touchmove 手势 ...
- java.lang.NoClassDefFoundError: org/apache/zookeeper/proto/SetWatches
Session 0x16b21fa441900b6 for server 192.168.240.126/192.168.240.126:2181, unexpected error, closing ...
- c++中结构体的使用
文章链接: 结构体定义: struct Books { ]; ]; ]; int book_id; } book; 访问结构体成员: #include <iostream> #includ ...
- 神经网络(12)--具体实现:如何对back propagation的正确性进行验证
我们在进行back propagation时难免会出现各种各样的问题,当出现问题的时候,我们的cost function仍然是随着迭代的次数下降的,但是这中间会有一些问题存在,那么我们如何来检查我们的 ...
- 任何人都适合的常用Chrome插件(工欲善其事必先利其器)
1.划词翻译 介绍链接:http://t.cn/RqpoGU4 下载地址: Chrome 应用商店(请翻墙). 下载 .crx 安装包手动安装 功能如下: - 支持几乎所有语言的翻译与阅读,并且同时支 ...