AtCoder Beginner Contest 333
总结
- 人生第一次掉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][1]\)怎么求,也就是要用\(f[i - 1]\)里的东西来表示\(f[i][1]\)
手动模拟一下\(n = 3\)或\(n = 4\)的情况
可以得到
\]
注意这里的式子是有后效性的,简单解一下方程就好了
具体实现看代码
#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的更多相关文章
- AtCoder Beginner Contest 100 2018/06/16
A - Happy Birthday! Time limit : 2sec / Memory limit : 1000MB Score: 100 points Problem Statement E8 ...
- AtCoder Beginner Contest 052
没看到Beginner,然后就做啊做,发现A,B太简单了...然后想想做完算了..没想到C卡了一下,然后还是做出来了.D的话瞎想了一下,然后感觉也没问题.假装all kill.2333 AtCoder ...
- AtCoder Beginner Contest 053 ABCD题
A - ABC/ARC Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Smeke has ...
- AtCoder Beginner Contest 136
AtCoder Beginner Contest 136 题目链接 A - +-x 直接取\(max\)即可. Code #include <bits/stdc++.h> using na ...
- AtCoder Beginner Contest 137 F
AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) ...
- AtCoder Beginner Contest 076
A - Rating Goal Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Takaha ...
- AtCoder Beginner Contest 079 D - Wall【Warshall Floyd algorithm】
AtCoder Beginner Contest 079 D - Wall Warshall Floyd 最短路....先枚举 k #include<iostream> #include& ...
- AtCoder Beginner Contest 064 D - Insertion
AtCoder Beginner Contest 064 D - Insertion Problem Statement You are given a string S of length N co ...
- AtCoder Beginner Contest 075 D - Axis-Parallel Rectangle【暴力】
AtCoder Beginner Contest 075 D - Axis-Parallel Rectangle 我要崩溃,当时还以为是需要什么离散化的,原来是暴力,特么五层循环....我自己写怎么都 ...
- AtCoder Beginner Contest 075 C bridge【图论求桥】
AtCoder Beginner Contest 075 C bridge 桥就是指图中这样的边,删除它以后整个图不连通.本题就是求桥个数的裸题. dfn[u]指在dfs中搜索到u节点的次序值,low ...
随机推荐
- 大模型落地实战指南:从选择到训练,深度解析显卡选型、模型训练技、模型选择巧及AI未来展望—打造AI应用新篇章
大模型落地实战指南:从选择到训练,深度解析显卡选型.模型训练技.模型选择巧及AI未来展望---打造AI应用新篇章 0.前言大模型发展史 早期阶段(1950s~1980s) 在1950年代初期,人们开始 ...
- shk_to_bram
Entity: shk_to_bram File: shk_to_bram.v Diagram Description Company: FpgaPublish Engineer: FP Create ...
- GIT:斯坦福大学提出应对复杂变换的不变性提升方法 | ICLR 2022
论文对长尾数据集中的复杂变换不变性进行了研究,发现不变性在很大程度上取决于类别的图片数量,实际上分类器并不能将从大类中学习到的不变性转移到小类中.为此,论文提出了GIT生成模型,从数据集中学习到类无关 ...
- RelationNet:学习目标间关系来增强特征以及去除NMS | CVPR 2018
论文基于NLP的注意力机制提出了目标关系模块,通过与其它目标的比对增强当前目标的特征,而且还可以代替NMS进行端到端的重复结果去除,思想十分新颖,效果也不错 来源:晓飞的算法工程笔记 公众号 论文 ...
- KingbaseES V8R6集群运维案例之---主备failover切换原因分析
案例说明: 生产环境,KingbaseES V8R6的集群发生failover切换,分析集群切换的原因. 适用版本: KingbaseES V8R6 集群架构: 137.xx.xx.67主 原备库 1 ...
- KingbaseES 表级设置autovacuum有关参数和触发机制
前言 在表级别设置autovacuum有关参数清理表的死亡元祖可以有效规避autovacuum触发全局默认阈值的高峰.例如,如果想让表的autovacuum任务更频繁,可以在表级设置更小的触发auto ...
- Android为按钮Button添加事件
匿名内部类 1 <!--匿名内部类方式--> 2 <Button 3 android:id="@+id/btn2" 4 android:layout_width= ...
- 配置腾讯云轻量级linux服务器用到的资源和步骤
pasv_address=82.157.112.34 #请修改为您的 Linux 云服务器公网 IPsftp://82.157.112.34:21 ①下载系统可视化https://cloud.tenc ...
- OpenHarmony装饰指定自定义组件:@BuilderParam装饰器
当开发者创建了自定义组件,并想对该组件添加特定功能时,例如在自定义组件中添加一个点击跳转操作.若直接在组件内嵌入事件方法,将会导致所有引入该自定义组件的地方均增加了该功能.为解决此问题,ArkUI ...
- PhotoView——支持图片缩放、平移、旋转的一个优雅的三方组件
简介 PhotoView是OpenAtom OpenHarmony(简称"OpenHarmony")系统的一款图片缩放及浏览的三方组件,用于声明式应用开发,支持图片缩放.平移.旋转 ...