Vigenère 密码

这个名字实在打不来...

题解：模拟

``` #include <cstdio>
#include <cstring>

const int MAXL = +;

bool cj;
int cl, kl;
char c[MAXL], k[MAXL], an;

int main(){
gets(k), gets(c);
kl = strlen(k), cl = strlen(c);
for (int i=; i<kl; i++)
if (k[i]<) k[i] += ;

for (int i=; i<cl; i++){
if (c[i]<) c[i] += , cj = true;
else cj = false;
an = (c[i]-'a'-(k[i%kl]-'a')+)%+'a';
if (cj) an -= ;
printf("%c", an);
}
}```

vigenere.cpp

题解：贪心+高精度，好吧，我看了wikioi的c++最快，这个方法简直....

``` #include <cmath>
#include <cstdio>
#include <cstring>
#include <algorithm>
using std::sort;

const int MAXN = +;
const int MAXL = +;
const int MOD = ;

int n;
double sum[MAXN];

struct bigInteger{
int len, a[MAXL];

bigInteger(){
memset(a, , sizeof(a));
len = ;
}

inline void print(){
printf("%d", a[len]);
for (int i=len-; i>=; i--)
printf("%04d", a[i]);
printf("\n");
}
}Pri;

struct Minister{
int l, r;
double sm;

friend bool operator < (const Minister& a, const Minister& b){
return a.sm<b.sm;
}
}mt[MAXN];

void operator *= (bigInteger& a, int b){
for (int i=, c=, t; i<=a.len+; i++)
t = a.a[i]*b+c,
a.a[i] = t%MOD,
c = t/MOD;

while (a.a[a.len+]) a.len ++;
}

void operator /= (bigInteger& a, int b){
for (int i=a.len, c=; i>=; i--)
c = c*MOD+a.a[i],
a.a[i] = c/b,
c %= b;
while (!a.a[a.len] && a.len>) -- a.len;
}

int main(){
scanf("%d", &n);
for (int i=; i<=n; i++)
scanf("%d %d", &mt[i].l, &mt[i].r),
mt[i].sm = log(mt[i].l)+log(mt[i].r);

sort(mt+, mt+n+);

double t;
sum[] = log(mt[].l);
for (int i=; i<=n; i++)
t = log(mt[i].l),
sum[i] = sum[i-]+t;

int k = ;
t = -;
for (int i=; i<=n; i++)
if (sum[i-]-log(mt[i].r)>t)
k = i, t = sum[i-]-log(mt[i].r);

Pri.len = , Pri.a[] = ;
for (int i=; i<k; i++)
Pri *= mt[i].l;
Pri /= mt[k].r;
Pri.print();
}```

game.cpp

题解：我只会用扩展欧几里得解...

``` #include <cstdio>

int a, b, x, y, t;

inline void ExGcd(int a, int b){
if (b==) return;
ExGcd(b, a%b);
t = x, x = y, y = t-(a/b)*x;
}

int main(){
scanf("%d %d", &a, &b), x = , y = ;
ExGcd(a, b);
while (x<=) x += b;
printf("%d", x);
}```

mod.cpp

题解：二分。开始没加读入优化，在vijos上TLE了...

``` #include <cstdio>
#include <cstring>

const int MAXN = 1e6+;

struct Indent{
int l, r, n;
}d[MAXN];

int n, m, mid, temp[MAXN], lim[MAXN];
char c;

inline int NextInt(){
int ret = ;
do
c = getchar();
while (!(<=c && c<=));

do
ret *= , ret += c-, c = getchar();
while (<=c && c<=);

return ret;
}

inline bool Check(int x){
memset(temp, , sizeof(temp));

int sum = ;
for (register int i=; i<=x; i++)
temp[d[i].l] += d[i].n, temp[d[i].r+] -= d[i].n;
for (register int i=; i<=n; i++){
sum += temp[i];
if (sum>lim[i]) return false;
}
return true;
}

int main(){
n = NextInt(), m = NextInt();
for (register int i=; i<=n; i++)
lim[i] = NextInt();
for (register int i=; i<=m; i++)
d[i].n = NextInt(), d[i].l = NextInt(), d[i].r = NextInt();

int l = , r = m+, mid;
while (l<r){
mid = (l+r)>>;
if (Check(mid)) l = mid+;
else r = mid;
}
if (l<m) printf("-1\n%d", l);
else printf("");
}```

classroom.cpp

## NOIP2012 题解的更多相关文章

1. NOIP2012题解

NOIP2012题解 Day1 Vigenère 密码 vigenere 直接模拟就好了,对于那张表找找规律就很短了. #include<iostream> #include<cst ...

2. [NOIP补坑计划]NOIP2012 题解&amp;做题心得

场上预计得分:100+90+70+100+100+3060=490520(省一分数线245) 题解: D1T1 Vigenère 密码 题面 水题送温暖~~ #include<iostream& ...

3. NOIP2012 疫情控制 题解（LuoguP1084）

NOIP2012 疫情控制 题解(LuoguP1084) 不难发现,如果一个点向上移动一定能控制更多的点,所以可以二分时间,判断是否可行. 但根节点不能不能控制,存在以当前时间可以走到根节点的点,可使 ...

4. [NOIP2012提高]借教室 题解（二分答案+差分）

[NOIP2012提高&洛谷P1083]借教室 Description 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室 ...

5. noip2012开车旅行 题解

题目大意: 给出n个排成一行的城市,每个城市有一个不同的海拔.定义两个城市间的距离等于他们的高度差的绝对值,且绝对值相等的时候海拔低的距离近.有两个人轮流开车,从左往右走.A每次都选最近的,B每次都选 ...

6. [NOIP2012]国王游戏 题解

题目大意: n个人排成一排,排头固定,其他可以变.每一个人左右手都有一个整数,一个人的分数为他所有前面的人左手上的数的乘积除以他右手上的数(向下取整),求在整列中最大分数的最小值. 思路: 首先,一切 ...

7. [NOIP2012]借教室 题解

题目大意: 有一个n个数的数列,m个操作,第i个操作使[li,ri]区间建di,问第几个操作使数列中出现负数. 思路: 暴力显然过不了,那么就可以优化了,不难想到线段树,显然需要良好的姿势,那么就差分 ...

8. 【数学】【NOIp2012】同余方程 题解 以及 关于扩展欧几里得与同余方程

什么是GCD? GCD是最大公约数的简称(当然理解为我们伟大的党也未尝不可).在开头,我们先下几个定义: ①a|b表示a能整除b(a是b的约数) ②a mod b表示a-[a/b]b([a/b]在Pa ...

9. 【NOIP2012】DAY1+DAY2题解

不贴代码的原因是我的代码在初中机房.忘记带过来了. DAY 1 T1随便搞,但是字符串相关的题我经常犯蠢 T2 一个结论题,OAO但是需要高精度写. 具体就是按左手的数除右手的数(还是怎么的来着)排个 ...

## 随机推荐

1. webform添加到webapi的支持

1.添加引用 添加对 System.Net.Http , System.Net.Http.Formatting , System.Web.Http , System.Web.Http.Common , ...

2. bzoj 1096: [ZJOI2007]仓库建设 斜率優化

1096: [ZJOI2007]仓库建设 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2242  Solved: 925[Submit][Statu ...

3. top.location != self.location

top.location != self.location 就是说当前窗体的url和父窗体的 url是不是相同 这个是为了防止别的网站嵌入你的网站的内容(比如用iframe嵌入的你的网站的页面)

4. 关于GVIM的配置。

最近开始考虑从常用的 Dev-Cpp 和 Visual Studio 开发环境中转到gvim+gcc+gdb. 我一直觉得IDE很好方便,不是很明白别人这样的配置.但还是开始有意识的去尝试更换环境. ...

5. nginx 防火墙、权限问题

1.nginx安装,配置完成之后,尝试访问没有响应,主机可以ping通,/var/log/nginx/access.log日志没有查到任何记录 解决方法:查看linux防火墙,关闭 命令:ipta ...

6. 20162327WJH程序设计与数据结构第七周总结

学号 20162327 <程序设计与数据结构>第7周学习总结 教材学习内容总结 1.关于接口的理解:接口可以理解为比较纯粹的抽象类 2.接口的特点:用interface定义接口 接口中的方 ...

7. Charles模拟网络请求页面的网络超时测试

正常情况下网络连接超时可能的原因有以下几点: 1.网络断开,手动的关掉了网络的连接 2.网络阻塞,导致你不能在程序默认等待时间内得到回复数据包. 3.网络不稳定,网络无法完整传送服务器信息. 4.系统 ...

8. P1525 关押罪犯 并查集

题目描述 SS城现有两座监狱,一共关押着NN名罪犯,编号分别为1-N1−N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用“怨气值”(一个正整数值) ...

9. Android为TV端助力 史上最简单易懂的跨进程通讯(Messenger)!

不需要AIDL也不需要复杂的ContentProvider,也不需要SharedPreferences或者共享存储文件! 只需要简单易懂的Messenger,它也称为信使,通过它可以在不同进程中传递m ...

10. Windows服务System权限下在当前用户桌面创建快捷方式C#实例程序

Windows服务一般运行在System权限下,这样权限比较高,方便执行一些高权限的操作. 但是,Environment.GetFolderPath等函数获取的也是System用户下的,而不是当前用户 ...