北京信息科技大学第十二届程序设计竞赛暨ACM选拔赛(同步赛)

A 爱丽丝的人偶(一)

#include<bits/stdc++.h>
using namespace std;
int n ;
int main (){
    scanf("%d",&n);
    int i=1,j=(n+1)/2+1;
   while(i<=(n+1)/2){
       printf("%d ",i);
       i++;
       if(j<=n){
           printf("%d ",j);
           j++;
       }
   }
}

B 爱丽丝的人偶(二)

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int M=1e5+10,mod=1e9+7;
int n ,k;
ll a[M];
ll jc[M];
ll poww(ll x,ll n){
     ll ans=1;
     while(n){
         if(n&1) ans=ans*x%mod;
         x=x*x%mod;
         n>>=1;
     }
    return ans;
}
int main (){
    scanf("%d%d",&n,&k);
    for (int i=1;i<=n;i++)
        scanf("%lld",&a[i]);
    sort(a+1,a+1+n);
    n=unique(a+1,a+1+n)-(a+1);
    ll ans=1;
    jc[0]=1;
    for(int i=1;i<=n;i++){
        ans=ans*i%mod;
        jc[i]=jc[i-1]*i%mod;
    }
    ans=ans*poww(jc[k],mod-2)%mod*poww(jc[n-k],mod-2)%mod;
    printf("%lld",ans);
 }

C 打毛玉大赛

#include<bits/stdc++.h>
using namespace std;
int a,b;
int main (){
    scanf("%d%d",&a,&b);
    if(b<a) swap(a,b);
    if(a==1&&b==2)
        printf("A");
    else
        printf("B");
}

D 贪玩的二小姐(续)

#include<bits/stdc++.h>
using namespace std;
int n ;
string s;
int main (){
    scanf("%d\n",&n);
    cin>>s;
    int x=0,y=0;
    for(int i=0;i<n;i++)
        {
        if(s[i]=='(' ) x++;
        else if(s[i]==')')
            {
            if(x==0) y++;
            else x--;
        }    
    }
    if(x%2==y%2) {
      if(x%2==0) 
      printf("%d",x/2+y/2);
      else
     printf("%d",x/2+y/2+2);      
      }
    else printf("-1");
    return 0;
 }

E 游戏机本当下手

#include<bits/stdc++.h>
using namespace std;
const int M=1e6+10;
#define ll long long
int n ,k;
string s;
ll a[M];
int cnt;
int main (){
    scanf("%d%d\n",&n,&k);
    cin>>s;
    int t=1;
    for(int i=0;i<n;i++)
        {
        if(s[i]!=s[i+1] )
            a[++cnt]=t,t=0;
        t++;
    }
    ll ans=0;
    if(k==1)
        {
        for(int i=1;i<=cnt;i++)
            ans+=(a[i] +1)*a[i]/2;
    }
    else{
        for(int i=1;i<=cnt-k+1;i++)
            ans+=a[i]*a[i+k-1];
    }
    printf("%lld",ans );
     return 0;
 }

F 宵暗的妖怪*

#include<bits/stdc++.h>
using namespace std;
const int M=1e5+10;
#define  ll long long
int n ;
ll a[M];
ll dp[M];
int main (){
    scanf("%d",&n);   
    for(int i=1;i<=n;i++)
        scanf("%lld",&a[i]);
    dp[3]=a[2];
    for(int i=4;i<=5;i++)
        dp[i]=max(dp[i-1],a[i-1]);
    for(int i=6;i<=n;i++)
        dp[i]=max(dp[i-1],dp[i-3]+a[i-1]);
     printf("%lld",dp[n]);   
        return 0;
 }

G 魔界伊始

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main(){
    int n;
    scanf("%d",&n);
    ll t=0;
    scanf("%lld",&t);
    for(int i=2;i<=n;i++)
    {
        ll a;
        scanf("%lld",&a);
        t=__gcd(a,t);
    }
    int q=0;
    scanf("%d",&q);
    for(int i=1;i<=q;i++){
        ll x;
        scanf("%lld",&x);
        if(x%t==0)
            printf("Yes\n");
        else
            printf("No\n");
    }
}

H 芭芭拉冲鸭~

#include<bits/stdc++.h>
using namespace std;
const int M=1e5+10;
string s;
int a[M];
int d[M],ans;
int h[M],nxt[M*2],to[M*2],cnt;
void add(int x,int y) {
    to[++cnt]=y;
    nxt[cnt]=h[x];
    h[x]=cnt;
}
void dfs(int x,int fa) {
    for(int i=h[x]; i; i=nxt[i]) {
        int y=to[i];
        if(y==fa) continue;
        dfs(y,x);
        if(a[x]!=a[y]) {
            ans=max(ans,d[x]+d[y]+1);
            d[x]=max(d[x],d[y]+1);
        } else {
            ans=max(ans,d[x]);
        }
    }
}
int main() {
    int n;
    scanf("%d\n",&n);
    cin>>s;
    for(int i=0; i<n; i++) {
        if(s[i]=='R') a[i+1]=1;
        else if(s[i]=='G') a[i+1]=2;
        else if(s[i]=='B') a[i+1]=3;
    }
    for(int i=1; i<=n-1; i++) {
        int x,y;
        scanf("%d %d",&x,&y);
        add(x,y);
        add(y,x);
    }
    dfs(1,0);
    printf("%d",ans);
}

I 永远亭的小游戏

#include<bits/stdc++.h>
using namespace std;
const int M=1e5+10,mod=1e9+7;
#define  ll long long
int n ,m,k;
int a,b,c;
ll  sa,sb,sc;
ll poww(ll x,ll n){
     ll ans=1;
     while(n){
         if(n&1) ans=ans*x%mod;
         x=x*x%mod;
         n>>=1;
     }
    return ans;
}
int main (){
    scanf("%d%d%d",&n,&m,&k);   
    for(int i=1;i<=n;i++)
        scanf("%d",&a),sa+=a,sa%=mod;
    for(int i=1;i<=m;i++)
        scanf("%d",&b),sb+=b,sb%=mod;
    for(int i=1;i<=k;i++)
        scanf("%d",&c),sc+=c,sc%=mod;
    ll ans=0;
    ll p=poww(n,mod-2)*poww(m,mod-2)%mod*poww(k,mod-2)%mod;
    ans=sa*sb%mod*sc%mod*p%mod;
     printf("%lld",ans);   
        return 0;
 }

J 芭芭拉冲鸭~(续)

#include<bits/stdc++.h>
using namespace std;
const int M=1e5+10;
string s;
int fa[M][20],t[30];
int d[M],sum[M][30];
int h[M],nxt[M*2],to[M*2],cnt;
void add(int x,int y) {
    to[++cnt]=y;
    nxt[cnt]=h[x];
    h[x]=cnt;
}
void dfs(int x,int f) {
    d[x]=d[f]+1;
    fa[x][0]=f;
    for (int i=1; i<=17; i++)
        fa[x][i]=fa[fa[x][i-1]][i-1];
    for(int i=1; i<=26; i++)
        sum[x][i]+=sum[f][i];
    int j=s[x-1]-'a'+1;
    sum[x][j]++;
    for(int i=h[x]; i; i=nxt[i]) {
        int y=to[i];
        if(y==f) continue;
        dfs(y,x);
    }
}
int lca(int x,int y) {
    if(d[x]<d[y]) swap(x,y);
    for(int i=17; i>=0; i--)
        if(d[x]-(1<<i)>=d[y]) x=fa[x][i];
    if(x==y) return x;
    for(int i=17; i>=0; i--)
        if(fa[x][i]!=fa[y][i]) x=fa[x][i],y=fa[y][i];
    return fa[x][0];
}
int main() {
    int n;
    scanf("%d",&n);
    for(int i=1; i<=n-1; i++) {
        int x,y;
        scanf("%d %d",&x,&y);
        add(x,y);
        add(y,x);
    }
    getchar();
    cin>>s;
    dfs(1,0);
    int q=0;
    scanf("%d",&q);
    for(int i=1; i<=q; i++) {
        int x,y;
        scanf("%d %d",&x,&y);
        int z=lca(x,y);
        memset(t,0,sizeof(t));
        t[s[z-1]-'a'+1]++;
        int ans=0,f=0;
        for(int j=1; j<=26; j++) {
            t[j]+=sum[x][j]+sum[y][j]-2*sum[z][j];
            if(t[j]%2) {
                ans+=t[j]-1;
                f=1;
            } else ans+=t[j];
        }
        if(f) ans++;
        printf("%d\n",ans);
    }
    return 0;
}

K 玩具销售员

#include<bits/stdc++.h>
using namespace std;
int n,m,k;
int main (){
    scanf("%d%d%d",&n,&m,&k);
    k*=2;
    if(k>=m) printf("Yes");
    else printf("No");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值