zoukankan      html  css  js  c++  java
  • AIsing Programming Contest 2020被吊打记

    ABC

    签到,过水已隐藏

    D

    做完第一次操作后数字只有2e5,位数很小,可以直接模拟了

    #include<bits/stdc++.h>
    using namespace std;
    const int N=2e5+7;
    int n,n1,s1,s2,a[N],pw1[N],pw2[N];
    char ch[N];
    int solve(int x)
    {
        if(!x)return 0;
        int num=0,tmp=x;
        while(x){if(x&1)num++;x/=2;}
        return 1+solve(tmp%num);
    }
    int main()
    {
        scanf("%d",&n);
        scanf("%s",ch+1);
        for(int i=1;i<=n;i++){a[i]=ch[i]-'0';if(a[i])n1++;}
        if(n1>=2)
        {
            pw1[n]=1;
            for(int i=n-1;i;i--)pw1[i]=2ll*pw1[i+1]%(n1-1);
            for(int i=1;i<=n;i++)if(a[i])s1=(s1+pw1[i])%(n1-1);
        }
        pw2[n]=1;
        for(int i=n-1;i;i--)pw2[i]=2ll*pw2[i+1]%(n1+1);
        for(int i=1;i<=n;i++)if(a[i])s2=(s2+pw2[i])%(n1+1);
        for(int i=1,x;i<=n;i++)
        if(a[i])
        {
            if(n1<=1)puts("0");
            else x=(s1-pw1[i]+n1-1)%(n1-1),printf("%d
    ",solve(x)+1);
        }
        else x=(s2+pw2[i])%(n1+1),printf("%d
    ",solve(x)+1);
    }
    View Code

    E

    考场上想到贪心,但还是没写出,码力退化严重。

    实际上是这样的,把骆驼分两类,然后按照k排序,循环后,若队列大小小于k,则直接加,反之比较与堆顶的价值,注意开小根堆,答案long long

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=2e5+7;
    struct node{int v,k;}a[N],b[N];
    int n,na,nb;
    ll ans;
    bool operator<(node a,node b){return a.k<b.k;}    
    priority_queue<int,vector<int>,greater<int> >q;
    int main()
    {
        int T;scanf("%d",&T);
        while(T--)
        {
            scanf("%d",&n);
            ans=0,na=0,nb=0;
            for(int i=1;i<=n;i++)
            {
                int k,l,r;scanf("%d%d%d",&k,&l,&r);
                if(l>r)ans+=r,a[++na]=(node){l-r,k};
                else ans+=l,b[++nb]=(node){r-l,n-k};
            }
            sort(a+1,a+na+1),sort(b+1,b+nb+1);
            for(int i=1;i<=na;i++)
            if(a[i].k)
            {
                if(q.size()<a[i].k)q.push(a[i].v);
                else if(q.size()==a[i].k&&a[i].v>q.top())q.pop(),q.push(a[i].v);
            }
            while(!q.empty())ans+=q.top(),q.pop();
            for(int i=1;i<=nb;i++)
            if(b[i].k)
            {
                if(q.size()<b[i].k)q.push(b[i].v);
                else if(q.size()==b[i].k&&b[i].v>q.top())q.pop(),q.push(b[i].v);
            }
            while(!q.empty())ans+=q.top(),q.pop();
            printf("%lld
    ",ans);
        }
    }
    View Code

    F

    太难了不写了

    rank329 rating=811(新号)

  • 相关阅读:
    CSS盒子模型
    Git
    FFmpeg
    根据经纬度查询当前地点,百度google接口
    取数组中随机元素
    PHP获取当前页面url
    冒泡
    PHP5中使用PDO连接数据库的方法
    js循环遍历
    判断网页中英文
  • 原文地址:https://www.cnblogs.com/hfctf0210/p/13285696.html
Copyright © 2011-2022 走看看