您的位置:首页 > 其它

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

2018-06-03 12:59 225 查看
【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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: