牛客小白月試合12

5008 ワード

https://ac.nowcoder.com/acm/contest/392#question
文書ディレクトリ
  • A华华听月月唱
  • B華教月月数学
  • C華華は月月に
  • を出題する
  • E華華は月月にプレゼントを用意します
  • I華華と月月ぶらぶら公園
  • J月月チャファの携帯電話
  • A華華さんは月月さんの歌を聞きます.
    並べ替えて、欲張りに処理します.yが最初のl<=y+1になるたびに、この行rのこの値がyの値を置き換える可能性があるとするので、この条件を満たす最大のrを探します.
    lがy+1より大きいまで、yを間で検索した最大値に置き換えます.
    #include 
    using namespace std;
    #define mp make_pair
    const int maxn=1e5+6;
    pair d[maxn];
    bool cmp(pair a ,pair b)
    {
       if(a.first!=b.first) return a.firstb.second;
    }
    int main()
    {
        int n,m;
        while(cin>>n>>m)
        {
            int x,y;
            for(int i=0;i>x>>y;
                if(x>y) swap(x,y);
                d[i]=mp(x,y);
            }
            sort(d,d+m,cmp);
            if(d[0].first!=1)
            {
                cout<y&&d[i-1].first<=y+1)
                {
                    y=tempy;
                    tempy=d[i].second;
                    ans++;
                }
                //cout<=n) cout<

    B華華は月月に数学を教える
    高速乗数高速乗数高速乗数高速乗数高速乗数高速乗数高速乗数
    #include 
    using namespace std;
    #define mp make_pair
    unsigned long long mod;
    unsigned long long add(unsigned long long x,unsigned long long y)
    {
        unsigned long long ans=0;
        while(y)
        {
            if(y%2) ans=(ans+x)%mod;
            y/=2;
            x=(x+x)%mod;
        }
        return ans;
    }
    
    unsigned long long pow( unsigned long long  x, unsigned long long  y, unsigned long long mod)
    {
       unsigned long long  ans=1;
        while(y)
        {
            if(y%2) ans=add(ans,x);
            y/=2;
            x=add(x,x);
        }
        return ans;
    }
    int main()
    {
        int t;
        cin>>t;
        while(t--)
        {
            unsigned long long a,b,p;
    
            cin>>a>>b>>p;
             mod=p;
            cout<

    C華は月月に出題する
    f(x*y)=f(x)*f(y); 積関数の性質;直線ふるいをつけて直接過ぎる
    #include 
    using namespace std;
    const long long mod=1e9+7;
    long long pow(long long x,long long y)
    {
        long long ans=1;
        while(y)
        {
            if(y&1) ans=ans* x %mod;
            y>>=1;
            x=x*x%mod;
        }
        return ans;
    }
    
    const long long maxn=1e7+3e6+5;
    long long num[maxn];
    
    void run(long long n)
    {
        vector prime;
        memset(num,-1,sizeof(num));
        long long ans=1;
    
        for(long long i=2;i<=n;i++)
        {
            if( num[i]==-1 )
            {
                num[i]=pow(i,n);
                prime.push_back(i);
            }
    
            for(long long j=0;j>n)
        {
            run(n);
        }
    
    
    
    }
    
    

    E華は月月にプレゼントを用意します
    二分列挙の答え
    #include 
    using namespace std;
    const int maxn=1e5+5;
    int n,k;
    int a[maxn];
    int check(int mid)
    {
        int ans=0;
        for(int i=0;i=k;
    }
    int main()
    {
    
        while(cin>>n>>k)
        {
            for(int i=0;i>a[i];
            }
    
            int l=1,r=1e9;
            while(l<=r)
            {
                int mid=(l+r)/2;
                if( check(mid) ) l=mid+1;
                else r=mid-1;
            }
            cout<

    I華華と月月は公園をぶらぶらします
    tarjan数ブリッジ
    #include 
    using namespace std;
    vector d[500005];
    stack s;
    int dfn[500005];
    int low[500005];
    int vtag[500005];
    int b[500005];
    int brige[500005];
    int times;
    int ans=0;
    void dfs(int t,int u)
    {
        dfn[t]=low[t]=times++;
        s.push(t);
        vtag[t]=1;
        for(int i=0;i>n>>m)
        {
            memset(b,0,sizeof(b));
            memset(vtag,0,sizeof(vtag));
            while(!s.empty()) s.pop();
            times=1;
            int x,y;
            for(int i=0;i

    J月チャファの携帯
    26個の配列を作成し、各アルファベットの位置を順番に格納します.各アルファベットは1つの配列を使用した後に二分クエリー配列を使用し、前回の二分結果より大きく、解があれば、この文字の後ろに文字があることを表します.例えばabcd文字列クエリーacd aは配列の最初の位置でc配列をクエリーし、cは3番目の位置で、最初の位置より大きいと続けます.
    #include  
    using namespace std;
    
    int lower(int x,vector &d)
    {
        int l=0,r=d.size()-1;
        while( l<=r)
        {
            int mid=(l+r)/2;
            if(d[mid]>str)
        {
            vector tag[28];
            for(int i=0;str[i];i++)
            {
                tag[ str[i]-'a'] .push_back(i);
            }
            int ll=str.size();
            for(int i=0;i<26;i++)
                tag[i].push_back(ll);
            int n;
            cin>>n;
            for(int i=0;i>temp;
                int x=-1;
                for(int j=0;temp[j];j++)
                {
                    int y=lower(x,tag[temp[j]-'a']) ;
                    // cout<