标签:als nbsp gets div include 游戏 name put pre
noip好难呀。
上一个感觉有点长了,重开一个。
36.Vigenère 密码
粘个Openjudge上的代码
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
#include <cstdlib>
#include <algorithm>
#include <iomanip>
using namespace std;
char a[101],s[1001],b[1001];
int c[1001],j;
int main()
{
int la,ls,i,j;
gets(a);
gets(s);
la=strlen(a);
ls=strlen(s);
for(i=0;i<la;i++)
{if(a[i]<=90)
a[i]=a[i]+32;}
for(i=0;i<la;i++)
c[i]=a[i]-97;
for(i=0;i<ls;i++)
c[i+la]=c[i];
for(i=0;i<ls;i++)
{
b[i]=s[i]-c[i];
if((s[i]>=65&&b[i]<65)||(s[i]>=97&&b[i]<97))
b[i]=b[i]+26;
}
puts(b);
return 0;
}
37.国王游戏
贪心。手动艾特LLJ。
粘一个别人的代码。
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int n,i,sum[10000],kx,ky,t[10000],ans[10000];
struct node
{
int x;
int y;
}a[1001];//每个大臣的左右手数值
bool cmp(node a,node b)
{
return a.x*a.y<b.x*b.y;//按照左右手乘积排序
}
bool judge()//用来判断当前大臣的结果是不是比ans大
{
int i;
for (i=1;i<=t[0];++i)
if (t[i]>ans[i])
return true;
else
if (t[i]<ans[i])
return false;
return false;
}
void mul(int x)//高乘
{
int g=0,i;
for (i=1;i<=sum[0];++i)
{
sum[i]=sum[i]*x+g;
g=sum[i]/10;
sum[i]=sum[i]%10;
}
while (g!=0)
{
++sum[0];
sum[sum[0]]=g%10;
g/=10;
}
}
void divv(int x)//高除,附带比较当前大臣答案和ans的大小关系
{
int num=0,i=sum[0]+1,s=0;
memset(t,0,sizeof(t));
while (num<x)
{
--i;
num=num*10+sum[i];
}
t[0]=i;
for (;i>=1;--i)
{
t[++s]=num/x;
num=num%x*10+sum[i-1];
}
//高除,其中t保存当前大臣的结果
if (t[0]>ans[0]||t[0]==ans[0]&&judge())//.若比ans大则更新ans
{
ans[0]=t[0];
for (i=1;i<=t[0];++i)
ans[i]=t[i];
}
}
int main()
{
cin>>n;
cin>>kx>>ky;
sum[1]=kx;
sum[0]=1;
ans[0]=1;
ans[1]=0;
//下标0保存长度
//sum用来计算到第i个大臣的左手乘积
for (i=1;i<=n;++i)
cin>>a[i].x>>a[i].y;
sort(a+1,a+n+1,cmp);
for (i=1;i<=n;++i)
{
mul(a[i].x);
divv(a[i].y*a[i].x);//因a[i].x当前已经乘过所以除的时候要再除一遍
}
for (i=1;i<=ans[0];++i)
cout<<ans[i];
}
标签:als nbsp gets div include 游戏 name put pre
原文地址:http://www.cnblogs.com/Achenchen/p/7653159.html