总结

  • 人生第一次掉rating
  • 各种降智操作

A

水题

B

逆天操作

WA了3发

第三次交的时候以为过了,等到切完E发现怎么B还没过(

#include<bits/stdc++.h>

using namespace std;
map<string, int> f; int main() {
f["AB"] = f["BC"] = f["CD"] = f["DE"] = f["EA"] = 1;
f["AC"] = f["BD"] = f["CE"] = f["DA"] = f["EB"] = 2;
string s1, s2;
cin >> s1 >> s2;
if(!f[s1]) swap(s1[0], s1[1]);
if(!f[s2]) swap(s2[0], s2[1]);
puts(f[s1] == f[s2] ? "Yes" : "No");
return 0;
}

C

人家题把上限都告诉你了

然后我\(O(12^3)\) 的枚举不写,写半个小时四进制枚举(

#include<bits/stdc++.h>

using namespace std;

bool check(int x) {
int a[15], len = 0;
while(x) a[++ len] = x % 4, x /= 4; for(int i = len ;i >= 1; -- i) {
if(!a[i]) return 0;
}
for(int i = len; i > 1; -- i) {
if(a[i] > a[i - 1]) return 0;
}
return a[1] == 3;
} int main() {
int n, cnt = 0;
cin >> n;
for(int i = 0; i < 1 << 24; ++ i) {
if(check(i)) ++ cnt;
if(cnt == n) {
int x = i, len = 0, a[15];
while(x) a[++ len] = x % 4, x /= 4;
for(int j = len ;j >= 1; -- j) {
cout << a[j];
}
return 0;
}
}
return 0;
}

D

以 \(1\) 为根,\(ans=n - max(size[y]\hspace{0.4cm} |\hspace{0.4cm} y \in H[1])\)

\(H[x]\) 为 \(x\) 所有儿子的集合

#include<bits/stdc++.h>

using namespace std;
const int N = 3e5 + 5; vector<int> H[N];
int fa[N], sz[N]; int dfs(int x) {
sz[x] = 1;
for(int y : H[x]) {
if(y != fa[x]) {
fa[y] = x;
sz[x] += dfs(y);
}
}
return sz[x];
} int main() {
ios :: sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
int n;
cin >> n;
for(int i = 1; i < n; ++ i) {
int x, y;
cin >> x >> y;
H[x].push_back(y);
H[y].push_back(x);
}
dfs(1);
int ans = n;
for(int y : H[1]) ans = min(ans, n - sz[y]);
cout << ans;
return 0;
}

E

贪心,打每个怪用离其最近的药水

#include<bits/stdc++.h>

using namespace std;
const int N = 2e5 + 5; int n, op[N], a[N];
bool used[N]; struct Node {
int p, v;
bool operator < (const Node &x) const {
if(v != x.v) return v < x.v;
else return p > x.p;
}
}; int main() {
ios :: sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
cin >> n;
set<Node> se;
for(int i = 1; i <= n; ++ i) {
cin >> op[i] >> a[i];
if(op[i] == 1) se.insert({i, a[i]});
}
for(int i = 1; i <= n; ++ i) {
if(op[i] == 2) {
auto it = se.lower_bound({i, a[i]});
auto x = *it;
if(x.v == a[i]) {
se.erase(it);
used[x.p] = 1;
}
else return cout << -1, int();
}
}
int cur = 0, ans = 0;
for(int i = 1; i <= n; ++ i) {
if(used[i]) ++ cur;
if(op[i] == 2) -- cur;
ans = max(ans, cur);
}
cout << ans << '\n';
for(int i = 1; i <= n; ++ i) if(op[i] == 1) cout << used[i] << ' ';
return 0;
}

F

一道比较有意思的概率dp

我们令 \(f[i][j]\) 表示当前一共\(i\)个人,其中第\(j\)个人留到最后的概率

不难得到

\[f[i][j] = \frac{1}{2} \times f[i][j - 1] + \frac{1}{2} \times f[i - 1][j - 1]
\]

现在就是看边界\(f[i][1]\)怎么求,也就是要用\(f[i - 1]\)里的东西来表示\(f[i][1]\)

手动模拟一下\(n = 3\)或\(n = 4\)的情况

可以得到

\[f[i][1] = ( \sum_{j = 2}^{i} \frac{1}{2^j} \times f[i - 1][i - j + 1]) + \frac{1}{2^i} \times f[i][1]
\]

注意这里的式子是有后效性的,简单解一下方程就好了

具体实现看代码

#include<bits/stdc++.h>
#define ll long long
#define rep(i, j, k) for(int i = j; i <= k; ++ i)
#define per(i, j, k) for(int i = j; i >= k; -- i) using namespace std;
const ll P = 998244353, N = 3005; ll f[N][N], inv[N]; ll qp(ll a, ll b) {
ll ret = 1;
while(b) {
if(b & 1) ret = ret * a % P;
b >>= 1;
a = a * a % P;
}
return ret;
} ll calc(ll x) {
return qp(2, x) * qp(qp(2, x) - 1, P - 2) % P;
}
void init() {
inv[N - 1] = qp(qp(2, N - 1), P - 2);
per(i, N - 2, 0) inv[i] = inv[i + 1] * 2 % P;
f[1][1] = 1;
} int main() {
int n; cin >> n;
init();
rep(i, 2, n) {
rep(j, 2, i) f[i][1] = (f[i][1] + inv[j] * f[i - 1][i - j + 1]) % P;
f[i][1] = f[i][1] * calc(i) % P;
rep(j, 2, i) f[i][j] = inv[1] * (f[i - 1][j - 1] + f[i][j - 1]) % P;
}
rep(i, 1, n) cout << f[n][i] << ' ';
return 0;
}

AtCoder Beginner Contest 333的更多相关文章

  1. AtCoder Beginner Contest 100 2018/06/16

    A - Happy Birthday! Time limit : 2sec / Memory limit : 1000MB Score: 100 points Problem Statement E8 ...

  2. AtCoder Beginner Contest 052

    没看到Beginner,然后就做啊做,发现A,B太简单了...然后想想做完算了..没想到C卡了一下,然后还是做出来了.D的话瞎想了一下,然后感觉也没问题.假装all kill.2333 AtCoder ...

  3. AtCoder Beginner Contest 053 ABCD题

    A - ABC/ARC Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Smeke has ...

  4. AtCoder Beginner Contest 136

    AtCoder Beginner Contest 136 题目链接 A - +-x 直接取\(max\)即可. Code #include <bits/stdc++.h> using na ...

  5. AtCoder Beginner Contest 137 F

    AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) ...

  6. AtCoder Beginner Contest 076

    A - Rating Goal Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Takaha ...

  7. AtCoder Beginner Contest 079 D - Wall【Warshall Floyd algorithm】

    AtCoder Beginner Contest 079 D - Wall Warshall Floyd 最短路....先枚举 k #include<iostream> #include& ...

  8. AtCoder Beginner Contest 064 D - Insertion

    AtCoder Beginner Contest 064 D - Insertion Problem Statement You are given a string S of length N co ...

  9. AtCoder Beginner Contest 075 D - Axis-Parallel Rectangle【暴力】

    AtCoder Beginner Contest 075 D - Axis-Parallel Rectangle 我要崩溃,当时还以为是需要什么离散化的,原来是暴力,特么五层循环....我自己写怎么都 ...

  10. AtCoder Beginner Contest 075 C bridge【图论求桥】

    AtCoder Beginner Contest 075 C bridge 桥就是指图中这样的边,删除它以后整个图不连通.本题就是求桥个数的裸题. dfn[u]指在dfs中搜索到u节点的次序值,low ...

随机推荐

  1. ElasticSearch分页查询的实现

    1.设置mapping PUT /t_order { "settings": { "number_of_shards": 1, "number_of_ ...

  2. Oracle两表关联更新

    表结构.测试数据 drop table t1; drop table t2; CREATE TABLE T1 ( name VARCHAR2(10) , code VARCHAR2(10) ); AL ...

  3. Shell脚本关闭Nginx进程

    [root@testapp ~]# ps -ef | grep nginx root 25265 25216 0 09:22 pts/0 00:00:00 grep --color=auto ngin ...

  4. KingbaseES V8R6 集群运维案例--麒麟系统bug导致sys_monitor.sh无法启动集群

    案例说明: 麒麟信安操作系统,在部署了KingbaseES V8R6集群后,sys_monitor.sh在启动集群时,启动数据库服务失败,导致集群无法正常启动.后连接现场分析发现,此环境只要通过ssh ...

  5. KingabseES-SQL优化_提升子查询

    什么是提升子查询/子链接 SubLink,子查询/子链接,他们的区别:子查询不在表达式中子句,子链接在in/exists表达式中的子句. 若以范围表的方式存在,则是子查询: 若以表达式的存在,则是子连 ...

  6. Luna likes Love 题解

    Problem Link 简要题意 题目很清楚. 分析 定理 两个人中左边的人一直向右运动,和两人向中间走所用的 步数相同 证明 假设有两组人为 \(a_l , a_r , b_l , b_r (a_ ...

  7. C语言跨平台时间操作计算时间差

    头文件 #pragma once #if defined(_WIN32) #include<sys/timeb.h> #if defined(__UNIX__)||defined(__AP ...

  8. Python 代码混淆工具概述

    在保护Python代码安全方面,有多种混淆工具可供选择,包括 Cython, Nuitka, Pyminifier 和 IPA guard.本文将介绍这些工具的特点和适用情况,以及在实际应用中的注意事 ...

  9. Cesium 根据飞机航线计算飞机的Heading(偏航角)、Pitch(俯仰角)、Roll(翻滚角)

    需求 设置飞机的一些坐标位置(经纬度高度),插值得到更多的坐标位置,然后飞机按照这些坐标集合形成的航线飞行,飞机的朝向.俯仰角以及飞机转弯时的翻转角根据坐标集合计算得出,而不需要手动设置heading ...

  10. #提交答案题#LOJ 6467 'Zip' Quine

    题目 一种比较巧妙的方式 print 1 print 1 print 1 print 1 print 1 print 1 repeat 3 2 print 2 repeat 3 2 print 2 r ...