noip跟着洛谷刷noip题2

Posted Achen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了noip跟着洛谷刷noip题2相关的知识,希望对你有一定的参考价值。

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];
}

 

  

 

 

 

 

以上是关于noip跟着洛谷刷noip题2的主要内容,如果未能解决你的问题,请参考以下文章

洛谷P1098 [NOIP2007 提高组] 字符串的展开

洛谷·NOIP模拟测试一·2017/10/2考后心得与检讨

noip2016洛谷P2827蚯蚓

寒假洛谷刷题技巧

洛谷刷题蓝桥杯专题突破-广度优先搜索-bfs(16)

求全排列的数学方法(洛谷1088 火星人noip2004普及组第4题)