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: 悄悄话 (打表)的更多相关文章

  1. HYSBZ 2145 悄悄话

    2145: 悄悄话 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 271  Solved: 104[Submit][Status][Discuss] ...

  2. BZOJ 4513: [Sdoi2016]储能表 [数位DP !]

    4513: [Sdoi2016]储能表 题意:求\[ \sum_{i=0}^{n-1}\sum_{j=0}^{m-1} max((i\oplus j)-k,0) \] 写出来好开心啊...虽然思路不完 ...

  3. BZOJ.4513.[SDOI2016]储能表(数位DP)

    BZOJ 洛谷 切了一道简单的数位DP,终于有些没白做题的感觉了...(然而mjt更强没做过这类的题也切了orz) 看部分分,如果\(k=0\),就是求\(\sum_{i=0}^n\sum_{j=0} ...

  4. BZOJ 3798 分块打表

    思路: 这题思路真是奇妙 先跑个暴力 每隔1e5打个表 块内暴力 打表程序: (开O3 15秒就跑完了) //By SiriusRen #include <bits/stdc++.h> u ...

  5. bzoj 4513 [Sdoi2016]储能表

    题面 https://www.lydsy.com/JudgeOnline/problem.php?id=4513 题解 要求的式子 用数位dp的方法去做 我们把式子拆开 变成 $\sum_{i=0}^ ...

  6. BZOJ 4569 [Scoi2016]萌萌哒 | ST表 并查集

    传送门 BZOJ 4569 题解 ST表和并查集是我认为最优雅(其实是最好写--)的两个数据结构. 然鹅!他俩加一起的这道题,我却--没有做出来-- 咳咳. 正解是这样的: 类似ST表有\(\log ...

  7. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  8. BZOJ.4540.[HNOI2016]序列(莫队/前缀和/线段树 单调栈 RMQ)

    BZOJ 洛谷 ST表的一二维顺序一定要改过来. 改了就rank1了哈哈哈哈.自带小常数没办法. \(Description\) 给定长为\(n\)的序列\(A_i\).\(q\)次询问,每次给定\( ...

  9. BZOJ 5308 [ZJOI2018] Day2T2 胖 | 二分 ST表

    题目链接 LOJ 2529 BZOJ 5308 题解 这么简单的题 为什么考场上我完全想不清楚 = = 对于k个关键点中的每一个关键点\(a\),二分它能一度成为哪些点的最短路起点(显然这些点在一段包 ...

随机推荐

  1. SpringBoot使用thymeleaf的方式引用static中的静态资源

    当我们在开发网站时为了快速完成,避免不了使用第三方的框架文件.这样我们就得引用框架中的各种资源文件.那么,在springboot中通过 thymeleaf如何在html中使用static文件夹下的静态 ...

  2. 模块 json 和 pickle

    目录 序列化 json 和 pickle 模块 序列化 序列:字符串 序列化:将其它数据类型转换成字符串的过程. 反序列化:字符串转成其它数据类型. 序列化的目的 1:以某种存储形式使用自定义对象持久 ...

  3. golang之面向对象编程

    1.Golang语言面向对象编程说明 1)Golang也支持面向对象编程(OOP),但是和传统的面向对象编程有区别,并不是纯粹的面向对象语言.所以我们说Golang支持面向对象编程特性是比较准确的. ...

  4. (1+x)^n

    #include<stdio.h> int main() { int n,i; while(scanf("%d %d",&n,&i)!=EOF) { i ...

  5. Scratch 母鸡保护鸡蛋

    今天我们一起实现一个“母鸡保护鸡蛋”的小游戏 具体思路是这样滴: 1.鸡蛋会不断的从右往左移动: 2.当母鸡快碰到鸡蛋的时候,按下“空格键”让母鸡跳跃起来: 3.如果母鸡落下没碰到鸡蛋,加一分: 4. ...

  6. logback日志详细解析

    1.为什么使用logback 内核重写.测试充分.初始化内存加载更小,这一切让logback性能和log4j相比有诸多倍的提升 logback非常自然地直接实现了slf4j,方便理解 支持自动去除旧的 ...

  7. [书籍翻译] 《JavaScript并发编程》第六章 实用的并发

    本文是我翻译<JavaScript Concurrency>书籍的第六章 实用的并发,该书主要以Promises.Generator.Web workers等技术来讲解JavaScript ...

  8. linux shell数值比较和字符串比较

    说明: 1. 把字符串当成整型进行比较,由于abcd等字符对不上0123当程序尝试去转成二进制时无法完成转换,所以用于数值比较的运算不能用于字符串比较:但是把整型当成字符串进行比较,0123这些数值完 ...

  9. ASE19团队项目beta阶段Backend组 scrum2 记录

    本次会议于12月5日,19:00在微软北京西二号楼sky garden召开,持续10分钟. 与会人员:Zhikai Chen, Lihao Ran, Xin Kang 请假人员:Hao Wang 每个 ...

  10. 什么是虚拟DOM

    一.前言 虚拟DOM概念随着react的诞生而诞生,由facebook提出,其卓越的性能很快得到广大开发者的认可:继react之后vue2.0也在其核心引入了虚拟DOM的概念,本文将以vue2.0使用 ...