AtCoder Beginner Contest 199 游记(AB水题,C字符串操作,D搜索,E状压)
A - Square Inequality
水题
B - Intersection
水题,就是找公共区间,维护一下 Lmax,Rmin即可
void solve() {
    int n, a, b;
    int maxa = -1, minb = 0x3f3f3f3f;
    cin >> n;
    for (int i = 0; i < n; ++i) {
        cin >> a;
        maxa = max(maxa, a);
    }
    for (int i = 0; i < n; ++i) {
        cin >> b;
        minb = min(minb, b);
    }
    cout << (minb - maxa + 1 > 0 ? minb - maxa + 1 : 0);
}
C - IPFL
交换两个或者把前一半和后一半交换,求 \(m\) 次变换后的结果。
模拟会T,把字符串前后两个分开存,然后进行操作
void solve() {
    string s, x, y;
    int n, q, a, b, op;
    cin >> n >> s >> q;
    x = s.substr(0, n), y = s.substr(n, n);
    while (q--) {
        cin >> op >> a >> b;
        if (op == 2) swap(x, y);
        else {
            a--, b--;
            if (a > b) swap(a, b);
            if (b < n) swap(x[a], x[b]);
            else if (a >= n)
                swap(y[a - n], y[b - n]);
            else
                swap(x[a], y[b - n]);
        }
    }
    cout << x << y;
}
D - RGB Coloring 2
\(n\) 个点 \(m\) 条边的无向图,求用三种颜色染色后每条边相连的点不同的图有几种。
一看数据范围显然是一个搜索题,不过直接搜索会有一些问题,因为先搜到哪个的不同可能图染色后是相同的,会造成重复,既然如此,那我们随便指定一个顺序就可以了。
using ll    = long long;
const int N = 30;
vector<int> e[N], a;
int col[N], v[N][4];
ll ans = 1, cur;
bool vis[N];
void dfs0(int x) {
    a.push_back(x);
    vis[x] = true;
    for (int &y : e[x])
        if (!vis[y]) dfs0(y);
}
void dfs(int x) {
    if (x == a.size()) {
        cur++;
        return;
    }
    for (int i = 1; i <= 3; ++i) {
        if (!v[a[x]][i]) {
            for (int &y : e[a[x]])
                if (!v[y][i]) v[y][i] = a[x];
            dfs(x + 1);
            for (int &y : e[a[x]])
                if (v[y][i] == a[x]) v[y][i] = 0;
        }
    }
}
void solve() {
    int n, m;
    cin >> n >> m;
    for (int i = 0, u, v; i < m; ++i) {
        cin >> u >> v;
        e[u].push_back(v);
        e[v].push_back(u);
    }
    for (int i = 1; i <= n; ++i) {
        if (!vis[i]) {
            cur = 0;
            a.resize(0);
            dfs0(i);
            for (int &y : e[i])
                if (!v[y][1]) v[y][1] = i;
            dfs(1);
            ans = ans * cur * 3;
        }
    }
    cout << ans << "\n";
}
E - Permutation 状压DP
借用一下 Acfboy 的思路

// Murabito-B 21/04/26
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 20;
struct node {
    int x, y, z;
    bool operator<(node b) const { return x < b.x; }
} a[N];
int n, m, L[N], R[N], g[N], f[(1 << 19) + 5];
bool flag[(1 << 19) + 5];
int popcount(int x) { return x == 0 ? 0 : popcount(x & (x - 1)) + 1; }
void solve() {
    cin >> n >> m;
    for (int i = 1; i <= m; ++i) cin >> a[i].x >> a[i].y >> a[i].z;
    sort(a + 1, a + 1 + m);
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= m; ++j) {
            if (a[j].x == i) {
                L[i] = j;
                break;
            }
        }
        for (int j = m; j > 0; --j) {
            if (a[j].x == i) {
                R[i] = j;
                break;
            }
        }
    }
    for (int S = 1; S < (1 << n); ++S) {
        flag[S] = true;
        int k   = popcount(S);
        if (L[k] == 0) continue;
        for (int i = 1; i <= n; ++i) g[i] = 0;
        for (int i = 1, j = 1; i <= k; ++i) {
            while ((S & (1 << j)) == 0) j++;
            for (int l = j; l <= n; ++l) g[l]++;
            j++;
        }
        for (int i = L[k]; i <= R[k]; ++i)
            flag[S] &= (g[a[i].y] <= a[i].z);
    }
    f[0] = 1;
    for (int S = 0; S < (1 << n); ++S)
        for (int i = 0; i <= 18; ++i)
            if (((S & (1 << i)) == 0) && flag[S | (1 << i)]) f[S | (1 << i)] += f[S];
    cout << f[(1 << n) - 1];
}
signed main() {
    ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);
    solve();
}
AtCoder Beginner Contest 199 游记(AB水题,C字符串操作,D搜索,E状压)的更多相关文章
- AtCoder Beginner Contest 084(AB)
		A - New Year 题目链接:https://abc084.contest.atcoder.jp/tasks/abc084_a Time limit : 2sec / Memory limit ... 
- AtCoder Beginner Contest 083 (AB)
		A - Libra 题目链接:https://abc083.contest.atcoder.jp/tasks/abc083_a Time limit : 2sec / Memory limit : 2 ... 
- AtCoder Beginner Contest 188 F - +1-1x2 思维题
		题目描述 给你两个数 \(x\),\(y\) 可以对 \(x\) 进行 \(+1,-1\) 或 \(\times 2\) 的操作 问最少操作多少次后变为 \(y\) \(x,y \leq 10^{18 ... 
- AtCoder Beginner Contest 137 F
		AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) ... 
- AtCoder Beginner Contest 068 ABCD题
		A - ABCxxx Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement This contes ... 
- AtCoder Beginner Contest 053 ABCD题
		A - ABC/ARC Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Smeke has ... 
- AtCoder Beginner Contest 223
		AtCoder Beginner Contest 223 A是纯纯的水题,就不说了 B - String Shifting 思路分析 我真的sb,一开始想了好久是不是和全排列有关,然后读了好几遍题目也 ... 
- KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解
		KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解 哦淦我已经菜到被ABC吊打了. A - Century 首先把当前年 ... 
- AtCoder Beginner Contest 184 题解
		AtCoder Beginner Contest 184 题解 目录 AtCoder Beginner Contest 184 题解 A - Determinant B - Quizzes C - S ... 
- AtCoder Beginner Contest 100 2018/06/16
		A - Happy Birthday! Time limit : 2sec / Memory limit : 1000MB Score: 100 points Problem Statement E8 ... 
随机推荐
- 【Android】关于去标题栏 | 有的时候代码有效有的时候无效
			原因就在于你的manifest.xml的theme指向谁? 一开始我的theme指向这个↑,所以就改了好多也没用 之后改成这个↓就好了 
- 2020ICPC上海 C题(数位dp, 记忆化搜索)
			先复习了下之前做的数位DP又做了道新题才看的这道题,对我来说还是一种新类型,涉及到非线性计算,之前做的都是形如 \(dp[x]-dp[y]\)这样的只用处理一个上限做下差即可.一开始想分别枚举 \(x ... 
- 吉特日化MES & HttpClient基础连接已经关闭: 连接被意外关闭
			在吉特日化MES调用某公司AGV平台下发任务的时候,使用HttpClient 进行POST请求,出现如下异常: HttpClient基础连接已经关闭: 连接被意外关闭 , 之前已经使用HTTPCli ... 
- excute方法和submit方法
			区别: 1.参数 execute Runnable submit Callable 2.返回值 execute :void submit :Futur ... 
- auto{x}与auto(x)---一位中国小伙为cppreference作出的贡献
			C++作为一门静态类型语言,是需要程序员声明变量类型的.然而来到了C++11,auto的诞生使得变量声明变得及为方便,尤其是对于比较长的模板类型,auto一定程度上为代码编写者减轻了负担.到了C+ ... 
- 【算法】Java版
			二分查找算法 二分查找算法(Binary Search Algorithm)是一种在有序数组中查找特定元素的搜索算法.该算法的基本思想是将数组从中间分成两部分,然后与目标元素进行比较,进而确定目标元素 ... 
- CVE-2022-39197 复现
			CVE-2022-39197 ️漏洞介绍 Cobalt Strike (CS) 是一个为对手模拟和红队行动而设计的平台,相当于增强版的Armitage,早期以Metasploit为基础框架,3.0版本 ... 
- Python——第二章:字符的编码encode和解码decode
			相关阅读:字符集(Character Set)和编码(Encoding)的历史演化 字符集和编码的总结: 1. ASCII编码: 8bit, 1byte => 256(最大可表示)2. GBK编 ... 
- 终于肝完了!全网最全、最详细、最全面的 Hadoop大数据学习教程( 2023最新版 )
			大家好,我是民工哥! 前面给大家介绍了:关系型数据库 MySQL . NoSQL 数据库 Redis . MongoDB .搜索引擎 ElasticSearch 等知识体系学习的文章. 在当今这样的就 ... 
- el-table 设置合并行或列时,显示错乱问题
			1. 需求效果图: 2. 接口数据格式: 点击查看代码 const list = [ { contractNo: "CAI-20220801001", contractItem: ... 
