NOIP2012 T1*2

D1T1 Vigenère 密码(一次ac)

用时 20min  复杂度 n

一道字符串模拟,给出密钥用一套简单的密码对应表把密码还原,只需要注意字母的范围。

因为不太熟悉字符的ASCII码搞的时间有点长,ASCII码的优点是可以把字母大小关系转化成数字进行处理,而且不必考虑字母的大小写。

呆马:

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
using namespace std;
int main()
{
    string a,b;
    cin>>a>>b;
    for(int i=0;i<b.length();i++)
    {
        int k=(a[i%a.length()]&31)-1;
        if((b[i]&31)-k>0) b[i]=b[i]-k;
        else b[i]=b[i]-k+26;
    }
    cout<<b;
    return 0;
}

D2T2 同余方程(一次ac)

用时:5min  复杂度 logn

拓展gcd的板子,要注意的是最后x要重新%一遍保证为正

呆马:

#include<cstdio>
#define ll long long
using namespace std;
ll exgcd(ll a,ll b,ll &x,ll &y)
{
    if(b==0)
    {
        x=1;
        y=0;
        return a;
    }
    ll k=exgcd(b,a%b,x,y);
    ll t=x;
    x=y;
    y=t-(a/b)*y;
    return k;
}
int main()
{
    ll a,b;
    scanf("%lld%lld",&a,&b);
    ll x,y;
    ll k=exgcd(a,b,x,y);
    printf("%lld",(x+b)%b);
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/charlesss/p/10891040.html