【CQ18高一暑假前挑战赛1】标程

【A】

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll qpow(ll a,ll x,ll Mod){
    a%=Mod; ll res=1;
    while(x){
        if(x&1) res=res*a%Mod;
        a=a*a%Mod;
        x>>=1;
    } return res;
}
int main()
{
    ll a,b,c;
    cin>>a>>b>>c;
    a=qpow(a,b,c);
    cout<<a<<endl;
    return 0;
}

【B】

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
    ll N,ans;
    cin>>N;
    ans=N;
    ans-=N/2;
    ans-=N/3;
    ans-=N/5;
    ans-=N/7;
    
    ans+=N/(2*3);
    ans+=N/(2*5);
    ans+=N/(2*7);
    ans+=N/(3*5);
    ans+=N/(3*7);
    ans+=N/(5*7);
    
    ans-=N/(2*3*5);
    ans-=N/(2*5*7);
    ans-=N/(3*5*7);
    ans-=N/(2*3*7);
    
    ans+=N/(2*3*5*7);
    cout<<ans<<endl;
    return 0;
}

【C】

#include<bits/stdc++.h>
using namespace std;
const int maxn=1010;
char c[maxn]; 
int dp[maxn][maxn];
int main()
{
    scanf("%s",c+1);
    int L=strlen(c+1),i,j;
    for(i=L;i>=1;i--){
        for(j=i;j<=L;j++){
            if(j-i+1==0) dp[i][j]=0;
            else if(j-i+1==1) dp[i][j]=(c[i]==c[j]?0:1);
            else {
                dp[i][j]=min(dp[i+1][j],dp[i][j-1])+1;
                if(c[i]==c[j]) dp[i][j]=min(dp[i][j],dp[i+1][j-1]);
            }
        }
    }
    cout<<dp[1][L]<<endl;
    return 0;
}

【D】

#include<bits/stdc++.h>
using namespace std;
const int maxn=100010;
int a[maxn],rt[maxn],cnt;
struct node{
    int l,r,val;
    node(){ l=r=val=0; }
    node(int L,int R,int V):l(L),r(R),val(V){}
}s[maxn*20];
void add(int &now,int pre,int x,int pos)
{
    now=++cnt;
    s[now]=node(s[pre].l,s[pre].r,s[pre].val+1);
    if(pos==-1) return ;
    if(((x>>pos)%2)==0) add(s[now].l,s[pre].l,x,pos-1);
    else add(s[now].r,s[pre].r,x,pos-1);
}
int query(int now,int pre,int x)
{
    int res=0;
    for(int i=30;i>=0;i--){
        int t=(x>>i)%2;
        if(t==0){
            if(s[now].r&&s[s[now].r].val-s[s[pre].r].val>0) now=s[now].r, pre=s[pre].r, res+=(1<<i);
            else if(s[now].l) now=s[now].l, pre=s[pre].l;
            else break;
        }
        if(t==1){
            if(s[now].l&&s[s[now].l].val-s[s[pre].l].val>0) now=s[now].l, pre=s[pre].l, res+=(1<<i);
            else if(s[now].r) now=s[now].r, pre=s[pre].r;
            else break;
        }
    }
    return res;
}
int main()
{
    int N,Q,L,R,x,i;
    scanf("%d%d",&N,&Q);
    for(i=1;i<=N;i++){
        scanf("%d",&a[i]);
        add(rt[i],rt[i-1],a[i],30);
    }
    for(i=1;i<=Q;i++){
        scanf("%d%d%d",&x,&L,&R);
        int ans=query(rt[R+1],rt[L],x);
        printf("%d
",ans);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/hua-dong/p/9128910.html