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

Posted ---学习ing---

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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\n",ans);
    }
    return 0;
}

 

以上是关于CQ18高一暑假前挑战赛1标程的主要内容,如果未能解决你的问题,请参考以下文章

CQ18高一暑假前挑战赛3标程

暑假前挑战赛1—— A,B题解

17暑假高一假期作文素材《最愚蠢的一代》

高一新生入学需要准备什么?

暑假集训test-8-30

CQ18阶梯赛第一场题解