luogu P5285 [12州が試験2019]サンプルに分けチート

LINK:サンプルに分けチート

これは、より多くのダース・ポイントよりも質問に答えるために時間を取って、非常に満足して遊んでいた最後の地方の選挙です。

しかし、多くのポイントを取得できませんでした。

各テストポイントの16ポイントの合計は、我々は、出力outにいくつかの答えを持っている小さなプログラムを書くことを意味する16の独自のスコアを持っています。

最初のポイントは、10万明確19の電源であることが判明することができ、入力1_998244353デジタル出力です。

しかし998244353モジュロを私たちに思い出させるためにモジュラス・テスト・ポイントへのバックが可能。以降、N <= 30000電力を直接かつ迅速にすることができます。

再び第1の点と第二の点が、長い長いオイラー(MOD-1)%に下降考え入力レンジ。

第一ポイントと第三の点は、私たちは、高精度の入力が入力中モジュロに読み取られている持っています。

第四の点1?モジュラスがなくなって疑問符ショーに続く数字1よりも点入力30,000以上。

または19の力が、我々は最初のモジュラスを見つける必要があるが、計算することができ暴力暴力的な列挙ついに率は1145141ですました

第五ポイント1?+出力ルック偉大な発見の答え大きなモジュラスを説明するためには、1E18の大きさに達しました。

暴力を列挙することはできません(列挙私の愚かな暴力..私は彼ら二人は、我々は、我々は答えyを見つけることができますX <Yを提供する答えを知っている我々は非常に近いXYモジュロ範囲を重視何の制約を考慮してください。

見かけの弾性率\(19 ^ {YX} ansx -ansy \) 制約率が少ない数十分な大きさがそれを列挙するように100 1E18程度以下であるので、我々は除数小さな大きさを算出することができます。

しかし、我々は最初の並べ替え0から9までの残数に加えて、見つけるためにしなければなりません。(このテストは、少し問題を指摘しています。

私たちは、7e20は最終的に高い罰金で列挙要因へのデータの必要性を持って見つけることができます!本当にあきらめないSTLを用いて重要な瞬間に良い多くの注目を書きint128。

これは、弾性率が、私が知っている、あまりにも大きな亀のスピードに乗っていることは注目に値する、キーが長い長いunsignedlonglongができ破裂追加を検討することです。

//#include<bits/stdc++.h>
#include<iostream>
#include<cstring>
#include<string>
#include<ctime>
#include<cctype>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<stack>
#include<vector>
#include<deque>
#include<list>
#include<algorithm>
#include<utility>
#include<bitset>
#include<set>
#include<map>
#include<iomanip>
#define ll long long
#define db double
#define INF 1000000000
#define ld long double
#define pb push_back
#define get(x) x=read()
#define putl(x) printf("%lld\n",x)
#define gt(x) scanf("%d",&x)
#define put(x) printf("%d\n",x)
#define rep(p,n,i) for(RE ll i=p;i<=n;++i)
#define go(x) for(ll i=lin[x],tn=ver[i];i;tn=ver[i=nex[i]])
#define pii pair<ll,ll> 
#define F first
#define S second
#define mk make_pair
#define RE register
#define mod 998244353
#define ull unsigned long long
using namespace std;
char *fs,*ft,buf[1<<15];
inline char getc()
{
    return (fs==ft&&(ft=(fs=buf)+fread(buf,1,1<<15,stdin),fs==ft))?0:*fs++;
}
inline ll read()
{
    RE ll x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    return x*f;
}
inline ll READ(ll p)
{
    RE ll x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=x*10%p+ch-'0';ch=getchar();}
    return x*f;
}
const ll MAXN=100010;
char a[20],c[110];
ll n;
struct wy
{
    ll x,y;
    ll friend operator <(wy a,wy b){return a.x<b.x;}
}t[MAXN];
inline ll ksm(ll b,ll p,ll M)
{
    ll cnt=1;
    while(p)
    {
        if(p&1)cnt=cnt*b%M;
        b=b*b%M;p=p>>1;
    }
    return cnt;
}
inline ull gsc(ull a,ll b,ll M)
{
    ull cnt=0;
    while(b)
    {
        if(b&1)cnt=(cnt+a)%M;
        a=(a+a)%M;b=b>>1;
    }
    return cnt;
}
inline ll Ksm(ull b,ll p,ll M)
{
    ull cnt=1;
    while(p)
    {
        if(p&1)cnt=gsc(b,cnt,M);
        b=gsc(b,b,M);p=p>>1;
    }
    return cnt;
}
signed main()
{
    freopen("1.in","r",stdin);
    scanf("%s",a+1);
    if(a[1]=='1'&&a[2]=='_'&&a[3]=='9')
    {
        get(n);
        rep(1,n,i)
        {
            ll x=READ(mod-1);
            putl(ksm(19,x,mod));
        }
    }
    if(a[1]=='1'&&a[2]=='?'&&a[3]!='+')
    {
        get(n);
        /*read();read();read();
        scanf("%s",c+1);
        ll len=strlen(c+1);
        for(ll i=500000;;++i)
        {
            ll ans=0;
            rep(1,len,j)
            {
                ans=(ans*10+c[j]-'0')%(i-1);
            }
            if(ksm(19,ans,i)==642666){putl(i);return 0;}//i==1145141
        }*/
        rep(1,n,i)
        {
            ll x=READ(1145141-1);
            putl(ksm(19,x,1145141));
        }
    }
    if(a[1]=='1'&&a[2]=='?'&&a[3]=='+')
    {
        get(n);
        /*rep(1,n,i)get(t[i].x);
        rep(1,n,i)get(t[i].y);
        sort(t+1,t+n+1);
        ll L,R,minn=INF;
        rep(1,n,i)
        {
            if(i<=10)continue;
            if(t[i].x-t[i-1].x<minn)L=i,R=i-1,minn=t[i].x-t[i-1].x;
        }
        putl(L);putl(R);
        cout<<t[L].x<<' '<<t[L].y<<endl;
        cout<<t[R].x<<' '<<t[R].y<<endl;
        cout<<(long double)t[R].y*19*19-t[L].y<<endl;
        long double w=(long double)t[R].y*19*19-t[L].y;
        //枚举因数 可以得到mod=5211600617818708273;*/
        rep(1,n,i)
        {
            ll x=read();
            putl(Ksm(19,x,5211600617818708273ll));
        }
    }
    return 0;
}

おすすめ

転載: www.cnblogs.com/chdy/p/12527445.html
おすすめ