• contest 1.23


    A.骰子

    规律

    #include <iostream>
    #include<cstdio>
    typedef long long ll;
    using namespace std;
    
    ll dp[5][100005],sum[5][100005];
    
    ll n,m;
    void init(){
      dp[1][1]=1,dp[1][2]=5,dp[1][3]=6,dp[1][4]=2;
      for(ll i=1;i<=n;i++){
        ll tmp=i%4;
        if(tmp==0) tmp=4;
        dp[1][i]=dp[1][tmp];
        sum[1][i]=sum[1][i-1]+dp[1][i];
      }
      dp[2][1]=5,dp[2][2]=6,dp[2][3]=8;
      dp[2][4]=9;dp[2][5]=8;dp[2][6]=6;
      for(ll i=1;i<=n;i++){
        ll tmp=i%6;
        if(tmp==0) tmp=6;
        dp[2][i]=dp[2][tmp];
        sum[2][i]=sum[2][i-1]+dp[2][i];
      }
      dp[3][1]=11;
      for(ll i=1;i<=n;i++){
        ll tmp=i%1;
        if(tmp==0) tmp=1;
        dp[3][i]=dp[3][tmp];
        sum[3][i]=sum[3][i-1]+dp[3][i];
      }
      dp[4][1]=14;
      for(ll i=1;i<=n;i++){
        ll tmp=i%1;
        if(tmp==0) tmp=1;
        dp[4][i]=dp[4][tmp];
        sum[4][i]=sum[4][i-1]+dp[4][i];
      }
    }
    
    int main()
    {
        scanf("%lld%lld",&n,&m);
        init();
        ll x=m/4;
        ll r=m%4;
        ll ans=sum[4][n]*x;
        if(r) ans+=sum[r][n];
        printf("%lld
    ",ans);
        return 0;
    }
    View Code

    D.zzs妹子

    排序+优先队列

    #include <iostream>
    #include<cstdio>
    #include<queue>
    #include<algorithm>
    using namespace std;
    
    struct Node{
        int l,r;
        bool operator <(const Node& b)const{
          return r>b.r;
        }
    }node[200005];
    priority_queue<Node> q;
    
    bool cmp(Node a,Node b){
      if(a.l!=b.l) return a.l<b.l;
      else return a.r<b.r;
    }
    
    int main()
    {
        int n;scanf("%d",&n);
        for(int i=1;i<=n;i++){
            scanf("%d%d",&node[i].l,&node[i].r);
        }
        sort(node+1,node+1+n,cmp);
        int ans=0;
        for(int i=1;i<=n;i++){
            if(q.empty()) {ans++;q.push(node[i]);continue;}
            Node top=q.top();
            if(node[i].l>top.r) {q.pop();q.push(node[i]);}
            else {ans++;q.push(node[i]);}
        }
        printf("%d
    ",ans);
        return 0;
    }
    View Code

    B.子序列 II

    树状数组

    #include <iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #define mod 1000000007
    #define lowbit(x) x&(-x)
    typedef long long ll;
    using namespace std;
    
    ll n,t;
    ll a[200005],b[200005],c[200005];
    ll pre_smaller[200005],pre_bigger[200005];
    ll after_smaller[200005],after_bigger[200005];
    
    inline ll getid(ll x){return lower_bound(b+1,b+1+t,x)-b;}
    
    void add(ll pos,ll val){
      for(ll i=pos;i<=n;i+=lowbit(i)) c[i]+=val;
    }
    
    ll getsum(ll pos){
      ll ret=0;
      for(ll i=pos;i>0;i-=lowbit(i)) ret+=c[i];
      return ret;
    }
    
    int main()
    {
        scanf("%lld",&n);
        for(ll i=1;i<=n;i++) scanf("%lld",&a[i]),b[i]=a[i];
        sort(b+1,b+1+n);
        t=unique(b+1,b+1+n)-(b+1);
        for(ll i=1;i<=n;i++){
            ll id=getid(a[i]);
            add(id,1);
            pre_smaller[i]=getsum(id-1);
            pre_bigger[i]=i-getsum(id);
        }
        memset(c,0,sizeof(c));
        for(ll i=n;i>=1;i--){
            ll id=getid(a[i]);
            add(id,1);
            after_smaller[i]=getsum(id-1);
            after_bigger[i]=(n-i+1)-getsum(id);
        }
        ll ans=0;
        for(ll i=1;i<=n;i++){
            ans=(ans+pre_smaller[i]*after_bigger[i]%mod)%mod;
            ans=(ans+pre_bigger[i]*after_smaller[i]%mod)%mod;
        }
        ans=ans%mod;
        printf("%lld
    ",ans);
        return 0;
    }
    View Code

    A.冠军剑士

    bfs

    #include <iostream>
    #include<cstdio>
    #include<cstring>
    #include<queue>
    #define inf 0x3f3f3f3f
    typedef long long ll;
    using namespace std;
     
    ll m,n,x1,y1,x2,y2,k;
    ll Map[105][105];
    ll vis[105][105];
    ll dire[4][2]={0,-1,-1,0,0,1,1,0};
    struct Node{ll x,y,dis;};
     
    void setbomb(ll x,ll y){
      for(ll i=max(x-1,(ll)1);i<=min(x+1,n);i++){
        for(ll j=max(y-1,(ll)1);j<=min(y+1,m);j++){
            Map[i][j]=-1;
        }
      }
    }
     
    bool in(ll x,ll y){
     return x>=1&&x<=n&&y>=1&&y<=m;
    }
     
    ll bfs(ll x,ll y){
      queue<Node> q;
      while(!q.empty()) q.pop();
      q.push(Node{x,y,0});vis[x][y]=1;
      while(!q.empty()){
        Node now=q.front();q.pop();
        if(now.x==x2&&now.y==y2) return now.dis;
        for(ll i=0;i<4;i++){
            ll nx=now.x+dire[i][0];
            ll ny=now.y+dire[i][1];
            if(in(nx,ny)&&!vis[nx][ny]&&Map[nx][ny]!=-1){
                q.push(Node{nx,ny,now.dis+1});
                vis[nx][ny]=1;
            }
        }
      }
      return 0;
    }
     
    int main()
    {
        scanf("%lld%lld%lld%lld%lld%lld%lld",&m,&n,&x1,&y1,&x2,&y2,&k);
        swap(n,m);
        for(ll i=1;i<=k;i++){
            ll x,y;scanf("%lld%lld",&x,&y);
            setbomb(x,y);
        }
        ll ans=bfs(x1,y1);
        printf("%lld
    ",ans);
        return 0;
    }
    View Code

    C.新校游乐场

    01背包

    #include <iostream>
    #include<cstdio>
    using namespace std;
     
    int n,t;
    int v[1005],w[1005],dp[1005];
     
    int main()
    {
        scanf("%d%d",&n,&t);
        for(int i=1;i<=n;i++){
            scanf("%d%d",&v[i],&w[i]);
        }
        for(int i=1;i<=n;i++){
            for(int j=t;j>=w[i];j--){
                dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
            }
        }
        printf("%d
    ",dp[t]);
        return 0;
    }
    View Code

    B.帝国交通

    转载请注明出处:https://www.cnblogs.com/lllxq/
  • 相关阅读:
    mysql数据库备份脚本
    int main(int argc,char *argv[])参数的应用
    文件I/O实现cp复制功能
    网络通信TCP编程实例代码
    外部碎片、进程描述符、内部碎片
    程序、进程、作业、线程的关系
    word2016怎么从第三页开始设置页码
    ARMs3c2440开发板挂接NFS服务
    u-boot添加一个hello命令
    vi 编辑器跳转到指定行数
  • 原文地址:https://www.cnblogs.com/lllxq/p/10307832.html
Copyright © 2020-2023  润新知