BZOJ 2145: 悄悄话 (打表)
题解
直接代词,所有格,常用副词,助动词,冠词,常用词打表 比较出现次数的多少来决定循环位移了几位。
CODE
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 5200;
const int p = 137;
typedef unsigned long long ULL;
map<int,bool>vis;
inline ULL hsh(const char *s) {
ULL re = 0; int i = 0;
while(s[i])
re = re * p + (ULL)s[i++];
return re;
}
inline void ins(const char *s) { vis[hsh(s)] = 1; }
inline void dictionary() {
ins("his");
ins("her");
ins("is");
ins("are");
ins("who");
ins("whom");
ins("whose");
ins("whoever");
ins("was");
ins("were");
ins("i");
ins("we");
ins("you");
ins("they");
ins("them");
ins("me");
ins("go");
ins("and");
ins("no");
ins("please");
ins("or");
ins("but");
ins("so");
ins("because");
ins("although");
ins("good");
ins("bad");
ins("well");
ins("happy");
ins("a");
ins("the");
ins("at");
ins("i'm");
ins("in");
ins("on");
ins("by");
ins("my");
ins("your");
ins("rather");
ins("than");
ins("little");
ins("few");
ins("fewer");
ins("what");
ins("how");
ins("when");
ins("where");
ins("be");
ins("also");
ins("make");
ins("do");
ins("did");
ins("done");
ins("up");
ins("down");
ins("of");
ins("had");
ins("has");
ins("have");
ins("since");
ins("it");
ins("its");
ins("think");
ins("thought");
ins("thinking");
ins("their");
ins("for");
ins("find");
ins("with");
ins("been");
ins("better");
ins("worse");
ins("more");
ins("less");
ins("fine");
ins("set");
ins("you're");
ins("right");
ins("can");
ins("could");
ins("should");
ins("would");
ins("that");
ins("this");
ins("those");
ins("these");
ins("against");
ins("back");
ins("about");
ins("many");
ins("much");
ins("as");
ins("now");
ins("own");
ins("our");
ins("from");
ins("work");
ins("will");
ins("worst");
ins("best");
ins("never");
ins("ever");
ins("since");
ins("hit");
ins("within");
ins("before");
ins("after");
ins("if");
ins("whether");
ins("something");
ins("someone");
ins("somebody");
ins("anything");
ins("anyone");
ins("anybody");
ins("nothing");
ins("nobody");
ins("none");
ins("whatever");
ins("however");
ins("wherever");
ins("finally");
ins("home");
ins("very");
ins("quite");
ins("an");
ins("only");
ins("not");
ins("while");
ins("off");
ins("out");
ins("you're");
}
char s[5005], tmp[5005];
int l[5005], r[5005];
inline char solve(char x, int k) {
if(!isalpha(x)) return x;
if(x >= 'A' && x <= 'Z') return 'a' + (x-'A'+k)%26;
else return 'a' + (x-'a'+k)%26;
}
inline bool chk(char x) { return x == ' '|| x == ',' || x == '.' || x == '?' || x == '!' || x == ';' || x == '\n'; }
inline void get(char *S) {
char ch; int i = 0;
while((ch=getchar())=='\n');
S[i++] = ch;
while((ch=getchar())!='\n')S[i++]=ch;
S[i] = 0;
}
int main () {
dictionary();
int T = 10;
while(T--) {
int cur = 0, n;
get(s); n = strlen(s);
for(int i = 0; i < n; ++i) {
if(i == 0 || chk(s[i-1])) l[++cur] = i;
if(i == n-1 || chk(s[i+1])) r[cur] = i;
}
for(int i = 1; i <= cur; ++i)
if(s[r[i]] == '.' || s[r[i]] == '?' || s[r[i]] == '!' || s[r[i]] == ';' || s[r[i]] == ',') --r[i];
int mx = 0, ans = 0;
for(int k = 0; k <= 25; ++k) {
int now = 0;
for(int i = 1; i <= cur; ++i) {
for(int j = l[i]; j <= r[i]; ++j)
tmp[j-l[i]] = solve(s[j], k);
tmp[r[i]-l[i]+1] = 0;
now += vis[hsh(tmp)];
}
if(now > mx) mx = now, ans = k;
}
for(int i = 0; i < n; ++i) {
if(!isalpha(s[i])) putchar(s[i]);
else putchar(s[i] = (s[i] >= 'A' && s[i] <= 'Z') ? 'A' + (s[i]-'A'+ans) % 26 : 'a' + (s[i]-'a'+ans) % 26);
}
if(T) puts("");
}
}
BZOJ 2145: 悄悄话 (打表)的更多相关文章
- HYSBZ 2145 悄悄话
2145: 悄悄话 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 271 Solved: 104[Submit][Status][Discuss] ...
- BZOJ 4513: [Sdoi2016]储能表 [数位DP !]
4513: [Sdoi2016]储能表 题意:求\[ \sum_{i=0}^{n-1}\sum_{j=0}^{m-1} max((i\oplus j)-k,0) \] 写出来好开心啊...虽然思路不完 ...
- BZOJ.4513.[SDOI2016]储能表(数位DP)
BZOJ 洛谷 切了一道简单的数位DP,终于有些没白做题的感觉了...(然而mjt更强没做过这类的题也切了orz) 看部分分,如果\(k=0\),就是求\(\sum_{i=0}^n\sum_{j=0} ...
- BZOJ 3798 分块打表
思路: 这题思路真是奇妙 先跑个暴力 每隔1e5打个表 块内暴力 打表程序: (开O3 15秒就跑完了) //By SiriusRen #include <bits/stdc++.h> u ...
- bzoj 4513 [Sdoi2016]储能表
题面 https://www.lydsy.com/JudgeOnline/problem.php?id=4513 题解 要求的式子 用数位dp的方法去做 我们把式子拆开 变成 $\sum_{i=0}^ ...
- BZOJ 4569 [Scoi2016]萌萌哒 | ST表 并查集
传送门 BZOJ 4569 题解 ST表和并查集是我认为最优雅(其实是最好写--)的两个数据结构. 然鹅!他俩加一起的这道题,我却--没有做出来-- 咳咳. 正解是这样的: 类似ST表有\(\log ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- BZOJ.4540.[HNOI2016]序列(莫队/前缀和/线段树 单调栈 RMQ)
BZOJ 洛谷 ST表的一二维顺序一定要改过来. 改了就rank1了哈哈哈哈.自带小常数没办法. \(Description\) 给定长为\(n\)的序列\(A_i\).\(q\)次询问,每次给定\( ...
- BZOJ 5308 [ZJOI2018] Day2T2 胖 | 二分 ST表
题目链接 LOJ 2529 BZOJ 5308 题解 这么简单的题 为什么考场上我完全想不清楚 = = 对于k个关键点中的每一个关键点\(a\),二分它能一度成为哪些点的最短路起点(显然这些点在一段包 ...
随机推荐
- 关于MyBatis传入String用于test判断的坑
不要在心情糟糕的时候写代码,能坑死自己. 今天码代码的时候出现一个问题,脾气暴躁到砸桌子, 在Mybatis传入参数为String并且用 if test 判断的过程中发现 <if test=&q ...
- 使用 IDEA 创建 maven 项目
文章目录 第一步 第二步 第三步 目录结构的设置 看下 web.xml 配置文件 第一步 点击 maven : 勾选从模板创建 : 选择 webapp : 第二步 第三步 如果你自己对 maven 进 ...
- Win10 自定义鼠标右键菜单
1. 点击文件鼠标右键显示软件 1.1 步骤 win+R输入regedit进入注册表 定位到HKEY_CLASSES_ROOT\*\shell下 在shell创建一个你想要的右键文件 例如:Kinok ...
- python多任务基础
1.多任务:两个程序段同时运行2.为某个函数创建线程并启动: import threading 线程名 = threading.Thread(target = 函数名,args = 参数元组) #创建 ...
- 1192: 零起点学算法99——The sum problem(C)
一.题目 http://acm.wust.edu.cn/problem.php?id=1192&soj=0 二.分析 要求从序列1,2,3,,,N,中截取一部分使他们的和为M 输入多组数据 输 ...
- 【C#】课堂知识点#1
标准数字格式字符串 https://docs.microsoft.com/zh-cn/dotnet/standard/base-types/standard-numeric-format-string ...
- Codeforces 1249 D2. Too Many Segments (hard version)
传送门 贪心 对于第一个不合法的位置,我们显然要通过删除几个覆盖了它的区间来使这个位置合法 显然删右端点更靠右的区间是更优的,所以就考虑优先删右端点靠右的,然后再考虑下一个不合法位置 用一个 $set ...
- 回归损失函数:L1,L2,Huber,Log-Cosh,Quantile Loss
回归损失函数:L1,L2,Huber,Log-Cosh,Quantile Loss 2019-06-04 20:09:34 clover_my 阅读数 430更多 分类专栏: 阅读笔记 版权声明: ...
- hdu 2544 Dijstra模板题
最短路 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- 15-MySQL DBA笔记-运维管理
第15章 运维管理 随着各种技术的快速发展,现今的DBA可以比以前的DBA维护多得多的数据库实例.DBA已经越来越像一个资源的管理者,而不是简单的操作步骤执行人.本章将为读者介绍规模化运维之道.首先, ...