首页 > 其他分享 >CF1552G A Serious Referee 题解

CF1552G A Serious Referee 题解

时间:2024-06-08 23:33:05浏览次数:34  
标签:ch int 题解 void long CF1552G FF Serious define

题目链接

点击打开链接

题目解法

感觉很神奇的题

首先把序列当成排列做

首先发现只要当成 \(01\) 序列做就是对的
为什么?
你假设有数 \(x<y\),你把 \(\le x\) 的数设成 \(0\), \(>x\) 且 \(\le y\) 的数设成 \(1\),\(>y\) 的数设成 \(2\),然后做题目中的排序操作,如果最终序列形成逆序对,则不合法,但这样因为需要枚举 \(0,1,2\),所以是 \(O(3^n)\) 的
但你发现,只要枚举 \(x,x+1\) 的位置就好了,因为一个没有排好序的序列一定存在数 \(x,x+1\) 的位置是逆序对
所以只需要枚举 \(0,1\) 即可

接下来的一步我想不到啊
考虑当前到第 \(i\) 个操作,前面操作未设计到的位置不填 \(01\),当前一步只会把前缀变 \(0\),后缀变 \(1\),我们这样暴力填
这个是时间复杂度是什么?
令 \(x_i\) 为第 \(i\) 步操作的位置与前 \(i-1\) 步操作未操作到的位置的交集的大小
则复杂度为 \(O(n\prod(x_i+1))\le O((\frac{n+k}{k})^k)\),这是可以过的

#include <bits/stdc++.h>
#define F(i,x,y) for(int i=(x);i<=(y);i++)
#define DF(i,x,y) for(int i=(x);i>=(y);i--)
#define ms(x,y) memset(x,y,sizeof(x))
#define SZ(x) (int)x.size()-1
#define all(x) x.begin(),x.end()
#define pb push_back
using namespace std;
typedef long long LL;
typedef unsigned long long ull;
typedef pair<int,int> pii;
template<typename T> void chkmax(T &x,T y){ x=max(x,y);}
template<typename T> void chkmin(T &x,T y){ x=min(x,y);}
template<typename T> void read(T &FF){
    FF=0;int RR=1;char ch=getchar();
    for(;!isdigit(ch);ch=getchar()) if(ch=='-') RR=-1;
    for(;isdigit(ch);ch=getchar()) FF=(FF<<1)+(FF<<3)+ch-48;
    FF*=RR;
}
const int N=50,K=20;
int n,k,cnt[K];
bool uns[K][N];
int len[K],op[K][N];
vector<LL> way;
void dfs(int i,LL cur){
    if(i>k){
        if(cur!=(1ll<<n)-(1ll<<(n-__builtin_popcountll(cur)))){ puts("REJECTED");exit(0);}
        return;
    }
    int res=0;
    F(j,1,len[i]) if(cur>>op[i][j]&1) cur^=1ll<<op[i][j],res++;
    DF(j,len[i]+1,1){
        if(j<=len[i]) cur|=1ll<<op[i][j];
        if(res<=len[i]-j+1&&len[i]-j+1<=res+cnt[i-1]) dfs(i+1,cur);
    }
}
int main(){
    read(n),read(k);
    if(n==1){ puts("ACCEPTED");exit(0);}
    F(i,1,k){
        read(len[i]);
        F(j,1,len[i]) read(op[i][j]),op[i][j]--;
    }
    F(i,0,n-1) uns[0][i]=1;
    F(i,1,k){
        F(j,0,n-1) uns[i][j]=uns[i-1][j];
        F(j,1,len[i]) uns[i][op[i][j]]=0;
    }
    F(i,0,n-1) if(uns[k][i]){ puts("REJECTED");exit(0);}
    F(i,0,k-1) F(j,1,len[i+1]) if(uns[i][op[i+1][j]]) cnt[i]++; 
    dfs(1,0);
    puts("ACCEPTED");
    return 0;
}

标签:ch,int,题解,void,long,CF1552G,FF,Serious,define
From: https://www.cnblogs.com/Farmer-djx/p/18239107

相关文章

  • CF717G Underfail 题解
    题意:若干区间,区间有权值,选择一个子集,使得权值和尽量大并且每个点不被覆盖超过\(x\)次。\(n\le500\)思路:很神奇的一道题。我们考虑费用流,如果单纯的一边是区间一边是点的话其实并不好做,所以这道题我们直接建一排\(n+2\)个点,一个区间\(l,r\)就从\(l\)到\(r+1\)连......
  • CCF-GESP 等级考试 2023年9月认证C++四级真题解析
    一、单选题(每题2分,共30分)第1题⼈们所使⽤的⼿机上安装的App通常指的是()。A.⼀款操作系统B.⼀款应⽤软件C.⼀种通话设备D.以上都不对正确答案:B.⼀款应⽤软件解析:App是"Application"的缩写,中文意思是"应用",特指安装在智能手机上的第三方应用软件。这些软件通常......
  • 打砖块 题解
    题目链接\(50pts\)对于没有\(Y\)砖的情况,可以用分组背包解决,算出每一列打\(j\)块砖需要的子弹以及对分数的贡献,按照分组背包即可。对于包含\(Y\)砖的情况,不能直接分组背包解决。这实际上是打的顺序问题,比如:NYNY如果手上有两枚子弹,最优策略是先打掉第二列,再打掉第......
  • 【Selenium+java环境配置】(超详细教程常见问题解决)
    Selenium+java环境配置windows电脑环境搭建-chrome浏览器1.下载chrome浏览器2.查看chrome浏览器版本3.下载chrome浏览器驱动4.配置系统环境变量PATH验证环境是否搭建成功1.创建java项目,添加pom文件中添加依赖2.编写代码运行常见问题&解决办法1.访问失败Theversio......
  • 猜排列 题解
    猜排列题解差eps步想到正解。题意描述有\(m\)个长为\(n\)序列\(a_1,\dots,a_n\),还有\(m\)个长为\(n\)序列\(b_1,\dots,b_n\)。其中\(b_i\)是由\(a_i\)通过排列\(p\)置换得到的,\(b_{p_i}=a_i\)。现在又要求出排列\(p\)会有多种可能,模\(998244353\)。So......
  • P10466 邻值查找 题解
    题目传送门前置知识二叉搜索树&平衡树解法笔者写这篇题解的时候题面应该是出锅了,建议去看Acwing的题面。第一问同luoguP2234[HNOI2002]营业额统计,平衡树维护前驱、后继(非严格意义上的)求出差值后取\(\min\)即可;第二问用map实现一个映射即可维护位置。代码#incl......
  • P10499 开关问题 题解
    题目传送门前置知识高斯消元法解异或方程组|乘法原理解法把开关的相互影响关系转化成异或,然后就转化成了异或方程组,高斯消元求解即可。判断是否存在解的过程同luoguP2455[SDOI2006]线性方程组。由于自由元仅能取\(0/1\),故总方案数为\(2\)的自由元数量次方。代码......
  • P7219 [JOISC2020] 星座 3 题解
    会发现题目的坐标其实是平面直角坐标系。我们按\(y\)坐标从小到大考虑所有的星星,假设当前考虑到了星星\(i\)。我们先计算出之前所有能够影响到\(i\)的星星的代价和为\(cost\)(可以用树状数组维护)。然后分类讨论。若\(c_i\lecost\),那么肯定直接将\(i\)直接涂黑,因为它更......
  • P10560 [ICPC2024 Xi'an I] The Last Cumulonimbus Cloud 题解
    好好玩的题。思路对于一个图上邻域问题,我们有一个很经典的做法:根号分治。考虑根号分治的本质是什么。我们把点分成两类,平衡每一种点的时间,也就是度数大的与度数小的点。所以对于这道题,我们有了更加好的做法。发现题目给的图的性质就是一个天然的划分方案。我们每次找到图中......
  • P10553 [ICPC2024 Xi'an I] Guess The Tree 题解
    挺有意思的题。思路考虑一个比较自然的做法。我们每次对于一棵树,我们将它的某一条链抽出来。这样,我们只需要知道这颗树的所有节点与链底的\(\text{lca}\),就可以知道它是属于这条链上哪一个节点的下面。然后就可以递归处理。由于交互库不是自适应的。我们可能可以想到随机......