凉凉夜色为我思念成河

想起了前天和我娇妻深情对唱凉凉,结果这两天真的透心凉,再也没有水题给我们做了。

今早上大家集体爆0,然后在我wa+TLE了8发之后,上帝终于被我奋取的精神感动了,给了我一个accepted.

这道题就是斐波拉契数列+快速幂取和+循环节点的计算,首先如果出现f[i]=f[1]&&f[i-1]=f[0]则出现循环,
而对n的模数只有n种可能,故n^2内便出现循环。
故,先求出循环节M,
再求a^b%M,快速幂即可

#include <iostream>
#include<map>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<set>
using namespace std;
int f[1020100];
int quickpow(unsigned long long a,unsigned long long b,int n)
{
    unsigned long long ans=1,base=a;
    while(b)
    {
        if(b%2==1)
        {
            ans=(ans*base)%n;
        }
        base=(base*base)%n;
        b=b>>1;
    }
    return ans;
}
int main()
{
    int t,m;
    int n;
    f[0]=0;
    f[1]=1;
    unsigned long long a,b;
    scanf("%d",&m);
    while(m--)
    {
        scanf("%llu%llu%d",&a,&b,&n);
        if(n==1||a==0)
        {
            printf("0
");
            continue;
        }

        for(int i=2; i<=n*n; i++)
        {
            f[i]=(f[i-1]%n+f[i-2]%n)%n;
            if(f[i-1]==0&&f[i]==1)
            {
                t=i-1;
                break;
            }
        }
        printf("%d
",f[quickpow(a%t,b,t)]);

    }
    return 0;
}

下一道题:

这个题就是对容器的使用,然后注意比较的时候要全部转换成小写字母比较,然后它输出的时候,又要按照字母顺序先输出大写再输出小写,所以还要用一个容器存取它本来的大小写。

#include <iostream>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<map>
#include<vector>
using namespace std;
map<string,int> kepa;
vector<string> t1,t2;
int main()
{
    string s;
    int i,j;
    while(cin>>s)
    {
        if(s[0]=='#')
            break;
        t1.push_back(s);
        int len=s.length();
        for(i=0; i<len; i++)
        {
            if(s[i]>='A'&&s[i]<='Z')
            {
                s[i]+=32;
            }
        }
        sort(s.begin(),s.end());
        kepa[s]++;
    }
    for(i=0; i<t1.size(); i++)
    {
        string s1=t1[i];
        for(j=0; j<s1.length(); j++)
        {
            if(s1[j]>='A'&&s1[j]<='Z')
            {
                s1[j]+=32;
            }
        }
        sort(s1.begin(),s1.end());
        if(kepa[s1]==1)
        {
            t2.push_back(t1[i]);
        }
    }
    sort(t2.begin(),t2.end());
    for(i=0; i<t2.size(); i++)
    {
        cout<<t2[i]<<endl;
    }
    return 0;
}

水逆退散!阿门!

原文地址:https://www.cnblogs.com/kepa/p/9397160.html