zoukankan      html  css  js  c++  java
  • CF1033C Permutation Game

    题目描述

    输入输出样例

    输入 #1

    8
    3 6 5 4 2 7 1 8

    输出 #1

    BAAAABAB

    输入 #2

    15
    3 11 2 5 10 9 7 13 15 8 4 12 6 1 14

    输出 #2

    ABAAAABBBAABAAB

    数据范围

    1<=n<=1e5,1<=ai<=n

    解题思路

    暴力:略,复杂度玄学

    正解:

    大佬们都用反建图+拓扑排序

    蒟蒻不才 只会dfs

    AC Code

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N = 1e6 + 10;
    ll b[N], vis[N], dep[N],num[N], a[N],t, n, m,  k,x,y;
    int dp[N][3];
    char v[1005][1005];
    int dfs(int x,int num) {
        if(dp[x][num%2]!=-1) return dp[x][num%2];
        else {
            dp[x][num%2]= (num%2==0) ? 0 : 1;
            int did=0;
            for(int i=1;; i++) {
                int l=x-i*a[x],r=x+i*a[x];
                if(l>=1&&a[l]>a[x]) {
                    if(num%2==0) dp[x][num%2]=max(dp[x][num%2],dfs(l,num+1)),did=1;
                    else dp[x][num%2]=min(dp[x][num%2],dfs(l,num+1)),did=1;
                }
                if(r<=n&&a[r]>a[x]) {
                    if(num%2==0) dp[x][num%2]=max(dp[x][num%2],dfs(r,num+1)),did=1;
                    else dp[x][num%2]=min(dp[x][num%2],dfs(r,num+1)),did=1;
                }
                if(l<1&&r>n) break;
            }
            if(!did) {
                return dp[x][num%2]=num%2;
            }
        }
        return dp[x][num%2];
    }
    int main() {
        cin>>n;
        for(int i=1; i<=n; i++) {
            cin>>a[i];
            dp[i][0]=dp[i][1]=-1;
        }
        for(int i=1; i<=n; i++) {
            if(dfs(i,0)) cout<<"A";
            else cout<<"B";
        }
    }
    /*
    15
    3 11 2 5 10 9 7 13 15 8 4 12 6 1 14
    */
  • 相关阅读:
    说下vue工程中代理配置proxy
    说一下登陆页面的实现逻辑
    $router和router区别
    iframe中涉及父子页面跨域问题
    浅析闭包
    用户注册之短信验证
    vue.js(三)
    vue.js(二)
    vue.js(一)
    批量更改会员权限
  • 原文地址:https://www.cnblogs.com/Larry-Zero/p/11763622.html
Copyright © 2011-2022 走看看