tags:

  • NOIP
  • 模拟
  • 倍增
  • 高精
  • Python

    categories:
  • 信息学竞赛
  • 总结

Luogu P1079 Vigenère 密码

Solution

  表示并不是很懂其他人发的题解.

  我是这么想的, 既然是题目要求用密文转明文而且转换规则一定的, 所以就可以用明文转密文的逆过程来完成.

  首先要搞明白明文是怎么变成密文的, 通过这个表可以观察到, 如果明文的一个字符是 ch1 ,密钥为 ch2 , 那么密文 ch3 对应的就是 ch1 在字母表中偏移 |ch2| 位, 例如  \(\text{ch1=A,ch2=B, ch3=ch1+|ch2|=A+B-A=B}\) , 如果偏移之后超过了 'Z', 那么就从'A'继续开始, 相当于这是一个环, 'Z'的后面是'A'.

  不难发现密文是明文在字母表中进行的偏移, 那么将密文转换为明文只需要将这个过程反过来就好了.只需要将密文减去一个密钥的偏移.例如 \(\text{ch3=F,ch2=C, ch1=ch3-|ch2|=F-(C-A)=D}\).

  知道了这个规则之后就不难写出程序了, 上面如果将其进行偏移出来比\(\text{A}\)小就利用取余来处理, 具体可以看代码

int cha=B-'A';
return 'A'+(A-cha-'A'+26)%26;

还需要注意几个问题:

  • 明文和密文对应的大小写是一致的.
  • 最好一开始把密文和明文都变成是大写, 这样好转化, 最后转化回来.
  • 第\(\text{ i }\)位密文对应的密钥为第\(\text{i}\mod \text{len2}\)位, 同样利用取余.
  • cctype库中几个函数, \(\text{islower(),tolower(),isupper(),islower()}\)比较好用, 参数为一个字符.

Code

#include<cctype>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#define N 1005
using namespace std; char a[N],b[N];
int s,r,l; inline char Change(char A,char B){
int cha=B-'A';
return 'A'+(A-cha-'A'+26)%26;//将密文在字母表中进行一定偏移
} int main(){
scanf("%s%s",a,b);' r=strlen(a),l=strlen(b);
int flag=0;
for(int i=0;i<l;++i){ if(islower(b[i]))flag=1;
if(isupper(b[i]))flag=2;//记录一下密文一开始的大小写 if(islower(b[i]))b[i]=toupper(b[i]);//将密文和密钥都转化为大写
if(islower(a[i%r]))a[i%r]=toupper(a[i%r]); char ch=Change(b[i],a[i%r]);//得到明文的一个字符 if(flag==1)ch=tolower(ch);//再明文将其转化为密文一开始的大小写
if(flag==2)ch=toupper(ch); putchar(ch);//输出这个字符
}
return 0;
}

Luogu P1080 国王游戏

Solution

  首先题目我们需要对大臣进行一定的排序, 使得获得最多奖赏的大臣奖赏最少, 前面的题解已经写的很清楚了, 如果大臣 \(\text{a,b}\) , \(\text{a}\) 排在 \(\text{b}\) 前面的条件是 \(\text{a.left}\times \text{a.right}<\text{b.left}\times \text{b.right}\).

  那么做法就比较显然了, 只需要对所有人的左右手乘起来排个序就好.然后统计答案, 最头疼的地方是需要用高精, 我自然是非常头疼, 但是可以不用c++啊, 可以用 Python 水一波啊, 毕竟人家最擅长的就是科学运算.

  但是在用 Python 开心的写了一波之后发现只得了60分.竟然还 WA 了一个点, 真是没办法忍受, 然后想方设法得到了 RE 的数据, 发现了 RE 的原因.

OverflowError: integer division result too large for a float

  百度之后发现是因为Python的浮点数是c语言float, 所以会出锅.

然后就想自己写一个整数除法, 先取余, 然后二分除法的结果.结果又出现了类似的问题.醉了.

  然后又百度, 好像是找到三种解决方案

  • \(\text{from \_\_future\_\_ import division}\)
  • \(\text{divmod()}\)函数
  • \(\text{decimal}\)模块
  • \(\text{a//b}\), 等效于a整除b, 不会产生浮点运算, 但是不如第二种快, 不知道为什么.

  可以自己百度具体的使用方法.我使用的第二种方法, 实际上\(\text{divmod(a,b)}\)返回\(\text{(int(a/b), a mod b)}\)

  在通过上述艰难过程后, 终于通过了...

Code

#表示Python的注释
class Minister:#定义了一个类
def __init__(self, left, right, lefttimesright):#初始化函数
self.left = left
self.right = right
self.lefttimesright = lefttimesright
def __repr__(self):
return repr((self.left, self.right, self.lefttimesright)) n=int(input());#input()读入一行
wang=list(map(int,input().split()));#将读入的一行转化为[a,b,...], []为列表list
s=[] for i in range(0,n):
guo=list(map(int,input().split()));
s.append(Minister(guo[0],guo[1],guo[0]*guo[1])); ss=sorted(s, key=lambda student: student.lefttimesright)#将排序后的结果赋值给ss
lei=wang[0]
i=0
ans=0
while i<n:
jieguo=divmod(lei,ss[i].right)#jieguo=(a//b,a%b),jieguo[0]=a//b
#print(jieguo[0])
if jieguo[0]>ans:
ans=jieguo[0];
lei*=ss[i].left;
i=i+1; print(ans)#输出

开车旅行

Solution

NOIP 2012 Day1的更多相关文章

  1. 【NOIP 2012 开车旅行】***

    题目描述 小 A 和小 B 决定利用假期外出旅行,他们将想去的城市从 1 到 N 编号,且编号较小的 城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市 i 的海拔高度为 Hi,城市 ...

  2. NOIp 2012 #2 借教室 Label:区间修改线段树

    题目描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借教室的信息,我们自然 ...

  3. NOIp 2012 #1 Vigenère 密码 Label:模拟

    题目描述 16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法――Vigenère 密 码.Vigenère 密码的加密解密算法简单易用,且破译难度比较高,曾在美国南 ...

  4. NOIP 2012 Day2T2 借教室题解

    NOIP 2012 Day2T2 借教室题解 题目传送门:http://codevs.cn/problem/1217/ 题目描述 Description 在大学期间,经常需要租借教室.大到院系举办活动 ...

  5. NOIP 2012 T5 借教室 [洛谷P1083]

    题目描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要 向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借教室的信息,我们自 ...

  6. 【NOIP 2012 疫情控制】***

    题目描述 H 国有 n 个城市,这 n 个城市用 n-1 条双向道路相互连通构成一棵树,1 号城市是首都, 也是树中的根节点. H 国的首都爆发了一种危害性极高的传染病.当局为了控制疫情,不让疫情扩散 ...

  7. 【NOIP 2012 国王游戏】 贪心+高精度

    题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右 手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排 成一排,国王站在队伍 ...

  8. NOIP 2012 Vigenère 密码

    洛谷 P1079 Vigenère 密码 https://www.luogu.org/problemnew/show/P1079 JDOJ 1779: [NOIP2012]Vigenèr密码 D1 T ...

  9. P1080 【NOIP 2012】 国王游戏[贪心+高精度]

    题目来源:洛谷 题目描述 恰逢 H国国庆,国王邀请n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排成一排,国王 ...

随机推荐

  1. BZOJ3343 & 洛谷2801:教主的魔法——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=3343 https://www.luogu.org/problemnew/show/2801 题目描述 ...

  2. IE9的大css文件截断问题

    最近做项目调试IE9的兼容性,遇到问题,样式应用不上去,在其他浏览器中是正常的. 经过查找,判定是IE9的css截断问题. 1. IE9截断判定方法 1. 打开IE Developer Tools,在 ...

  3. YBT 5.3 数位动态规划

    记忆化搜索的专题 题解在代码中 Amount of Degrees[loj 10163] /* 此题可以转换成将10进制转成b进制后有k个1其他都为0的个数 所以用记忆化dfs dp[pos][sum ...

  4. php 获取客户端IP地址经纬度所在城市

    1. [代码]获取客户端IP地址经纬度所在城市 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 <?php   $getIp=$_SERVER["REMOTE_ADDR ...

  5. CSS设计一个三列布局的页面

    探讨这种布局是因为最近对话框组件以及信息系统B/S界面布局的需要.无论是什么,我们在写CSS之前首先引入reset.css,我使用的是淘宝的reset. 01 /* 02 KISSY CSS Rese ...

  6. 关于微信内置浏览器安卓端session丢失问题

    项目上线测试,发现微信安卓端存在用户登录无法验证session情况, 导致每次接口请求都无法识别,而苹果客户端不会出现此问题,非微信环境打开不会出现此问题,找到一些解决方案做下记录: 方案1: 由于微 ...

  7. Jade模板引擎学习(二)语法:代码、变量、循环、过滤器及mixin

    Jade语法 一.代码 不会被缓冲代码 ul - for(var i=0; i; i++) li Jade Engine 会转换为: <ul> <li>Jade Engine& ...

  8. 转:PriorityQueue

    转自:PriorityQueue 本文github地址 Java中PriorityQueue通过二叉小顶堆实现,可以用一棵完全二叉树表示.本文从Queue接口函数出发,结合生动的图解,深入浅出地 分析 ...

  9. Tomcat报错:Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/JFreeChartTest]]

    最好把项目移除,然后在tomcat的webapps发布路径下也把项目文件删掉,重新部署就好了,原因是可能在tomcat的remove覆盖中以前的文件有所保留导致冲突,亲测有效

  10. hdu5828 Rikka with Sequence

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=5828 [题解] 考虑bzoj3211 花神游历各国,只是多了区间加操作. 考虑上题写法,区间全为1打标记 ...