2020こんにちはcodeforces

トピックリンク:https://codeforces.com/contest/1284

A:新年とゲーム

そこに、N列Sであることが効果の対象1、S 2 .... S N及びm列T 1、T 2 .... T nは、毎年、および対応するSがTに対応見つける必要そしてそれらを接続します。ルール、それは最後の文字列に達したときに、後方の文字列の後に毎年移動、最初の文字列に対応する、最初の年から始まり、来年は最初の文字列に戻ります。
N入力効果ストリングSにサンプル1、S 2 .... S nは、入力文字列Tの後にM 1、T 2 .... T Nその後、yは整数を表し、年ごとに求め、Qの問い合わせに答える必要があります。N、M(1≤n、m≤20)の範囲内の各数値は 、 以下の文字列長より110,1≤q≤2020,1≤y≤10より大きい。9

この質問に対する私の解決策は、mとnは最終的に0又はターンであれば、直接%であることができる、二つの文字列の対応する位置に配列されている見つけることです。

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
#define pb push_back
#define ll long long
#define pii pair<int,int>
#define INF 0x3f3f3f3f
string ss1[25],ss2[25];
int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
        cin>>ss1[i];
    for(int i=1;i<=m;i++)
        cin>>ss2[i];
    int q;
    scanf("%d",&q);
    while(q--)
    {
        int t;
        scanf("%d",&t);
        int t1=t%n;
        int t2=t%m;
        if(!t1)t1=n;
        if(!t2)t2=m;
        cout<<ss1[t1]<<ss2[t2]<<endl;
    }
    return 0;
}

B:新年とアセントシーケンス

任意の2つの配列の組み合わせで影響を受けるN昇順に存在する(それらと組み合わせて、順序を変更せずに)指定された(すなわち、正面位置に位置の数よりも小さい数)の後。
入力整数N(1≤n≤1e5)、次の行のn(1≦LがL、このシーケンスの長さを表す)初めに、L lに桁S続いI、J(0≦S I、J ≦10 。6)、およびすべてのLは1E5を超えません。

この問題に格納された最大値と各シーケンスの最小値の溶液、およびこの配列自体を昇順があるか否かを判定する。それ自体上昇、最小0から1の値と接頭辞を追加したがあれば最小番号の後に+1プレフィックスは、行うと。最後に、最大値は、接頭辞から撮影してすることができます。

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
#define pb push_back
#define ll long long
#define pii pair<int,int>
#define INF 0x3f3f3f3f
const int maxn=1e6+7;
int minn[maxn],maxx[maxn];
bool ok[maxn];
int mmm[maxn];
int main()
{
    int n;
    ll sum=0;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        int l;
        scanf("%d",&l);
        int a;
        int max1,min1;
        scanf("%d",&max1);
        min1=max1;
        for(int j=2;j<=l;j++)
        {
            scanf("%d",&a);
            if(a<min1)min1=a;
            if(a>min1)ok[i]=1;
            if(a>max1)max1=a;
        }
        maxx[i]=max1;
        minn[i]=min1;
        if(ok[i])mmm[0]++;
        else mmm[min1+1]++;
    }
    for(int i=1;i<maxn;i++)
        mmm[i]+=mmm[i-1];
    for(int i=1;i<=n;i++)
    {
        if(ok[i])sum+=n;
        else{
            sum+=mmm[maxx[i]];
        }
    }
    cout<<sum<<endl;
    return 0;
}

C:新年と順列

この問題は、連続するサブシーケンスのサイズと一致しているので、最大マイナス最小長はマイナス1に等しく、それは見ることができる、連続した配列を見つけることです。これにより、配置する必要はラインだけを頼りにしています。

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
#define pb push_back
#define ll long long
#define pii pair<int,int>
#define INF 0x3f3f3f3f
const int maxn=250007;
ll fa[maxn];
int main()
{
    int n,mod;
    fa[0]=1;
    scanf("%d%d",&n,&mod);
    for(int i=1;i<=n;i++)fa[i]=fa[i-1]*i%mod;
    ll sum=0;
    for(int i=1;i<=n;i++)
    {
        sum+=((n-i+1)*(fa[i]*fa[n-i+1]%mod))%mod;
        sum%=mod;
    }
    cout<<sum<<endl;
}

Dはそれを書いていない、ので、修正が完了しました。

おすすめ

転載: www.cnblogs.com/gxywjl/p/12152217.html