NOIP2012提高组day1题解

1.Vigenère密码
  一开始以为是明码反暗码,就直接把密码表预处理,然后测了多好多遍还是没过样例,十分困惑与不解然后就看一了一遍题目(咳,
  暗码减去密码取模
  这一遍很自信然后爆零了
  (输出区分大小写

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=1010;
char m[maxn],k[maxn];
int lm,lk,key[maxn];
int main()
{
freopen("vigenere.in","r",stdin);
freopen("vigenere.out","w",stdout);
scanf("%s%s",k,m);
lm=strlen(m),lk=strlen(k);
for(int i=0;i<lk;i++)
if(k[i]>='a'&&k[i]<='z') key[i]=k[i]-'a';
else key[i]=k[i]-'A';
int j=0;
for(int i=0;i<lm;i++)
{
char tmp;
if(m[i]>='a'&&m[i]<='z') tmp='a',m[i]-='a';
else tmp='A',m[i]-='A';
m[i]-=key[j];
if(m[i]<0) m[i]+=26;
m[i]+=tmp;
j++;
if(j>=lk) j-=lk;
}
for(int i=0;i<lm;i++)
printf("%c",m[i]);
return 0;
}


2.国王游戏
手推几组数据就很容易得到一个结论:最优的方案肯定是大臣们按成绩升序排序时候的序列,然后要打高精度(想吐。初测六十,位数最高点没处理好
结论摸鱼证明:
  A1…Ax-1AxAx+1…Ay-1AyAy+1
设A1到Ax-1乘积为k1,那么Ax的钱就是k1/Bx,
设Ax+1到Ay-1乘积为k2,那么Ay的钱就是k1*Ax*k2/By
那么最优方案就是max(k1/Bx,k1*Ax*k2/By)
讲Ay和Ax互换,同理可得此时最优方案是max(k1/By,k1*k2*Ay/Bx)
易得

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值