AtCoder Beginner Contest 328

A - Not Too Hard (atcoder.jp)

#include <bits/stdc++.h>
#define debug(a) cout<<#a<<"="<<a<<'\n'; using namespace std;
using i64 = long long; typedef pair<i64, i64> PII; int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr); i64 n, x, ans = 0;
cin >> n >> x;
vector<int> a(n); for (auto &i : a) {
cin >> i;
if (i <= x) ans += i;
} cout << ans << '\n'; return 0; }

B - 11/11 (atcoder.jp)

只有月份和日期都是由同一个数字组成时,才可能有重期日

#include <bits/stdc++.h>
#define debug(a) cout<<#a<<"="<<a<<'\n'; using namespace std;
using i64 = long long; typedef pair<i64, i64> PII; int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr); int N;
cin >> N;
vector<int> D(N + 1); i64 ans = 0;
for (int i = 1; i <= N; i ++) {
cin >> D[i];
int op = i % 10;
if (i < 10) {
while (op <= D[i]) {
ans ++;
op = op * 10 + op;
}
} else if (i < 100 && i % 10 == i / 10) {
while (op <= D[i]) {
ans ++;
op = op * 10 + op;
}
}
} cout << ans << '\n'; return 0; }

C - Consecutive (atcoder.jp)

前缀和处理一下相邻相同的个数即可

#include <bits/stdc++.h>
#define debug(a) cout<<#a<<"="<<a<<'\n'; using namespace std;
using i64 = long long; typedef pair<i64, i64> PII; int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr); int N, Q;
string s;
cin >> N >> Q >> s;
vector<int> pre(N + 1);
s = " " + s;
for (int i = 1; i <= N; i ++) {
pre[i] = pre[i - 1];
if (s[i] == s[i - 1])pre[i] ++;
} while (Q--) {
int l, r;
cin >> l >> r ;
cout << pre[r] - pre[l] << '\n';
} return 0; }

D - Take ABC (atcoder.jp)

貌似正解是用栈来做,不过我直接模拟也能过,就是时间卡的有点极限

#include <bits/stdc++.h>
#define debug(a) cout<<#a<<"="<<a<<'\n'; using namespace std;
using i64 = long long; typedef pair<i64, i64> PII; int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr); string s;
cin >> s;
int pos = 0;
while (pos < s.size()) {
if (s.substr(pos, 3) == "ABC") {
s.erase(pos, 3);
pos --;
pos = max(pos, 0);
if (s[pos] == 'B') pos --;
pos = max(pos, 0);
continue;
}
pos ++;
} cout << s << '\n';
return 0; }

E - Modulo MST (atcoder.jp)

不能直接用克鲁斯卡尔算法去做

因为克鲁斯卡尔是按照固定权值下的计算最小生成树,但是这题是要求取模意义下的最小生成树,按照权值排序得到的结果不一定是最小的,不过观察到这题的范围很小,所以可以直接暴力去做

考虑对\(M\)条边选出\(N-1\)条边出来,多余就\(return\),如果在合并的过程中发现是个环也\(return\),剩下的就是比较了

#include <bits/stdc++.h>
#define debug(a) cout<<#a<<"="<<a<<'\n'; using namespace std;
using i64 = long long; typedef pair<i64, i64> PII; struct Edge {
i64 v, u, w;
}; constexpr int N = 10;
struct UFS {
int p[N], rank[N], sz; /
void link(int x, int y) {
if (x == y)
return;
if (rank[x] > rank[y])
p[y] = x;
else
p[x] = y;
if (rank[x] == rank[y])
rank[y]++;
}
void init(int n) {
sz = n;
for (int i = 0; i <= sz; i++) {
p[i] = i;
rank[i] = 0;
}
}
int find(int x) {
return x == p[x] ? x : (p[x] = find(p[x]));
}
void unin(int x, int y) {
link(find(x), find(y));
}
void compress() {
for (int i = 0; i < sz; i++)
find(i);
}
}; int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr); i64 N, M, K;
cin >> N >> M >> K;
vector<Edge> g(M);
for (int i = 0; i < M; i ++) {
cin >> g[i].u >> g[i].v >> g[i].w;
g[i].w %= K;
} i64 ans = K;
vector<bool> vis(M); auto dfs = [&](auto self,int edge,int step){
if(step >= M){
if(edge != N - 1) return ; UFS ufs;
ufs.init(N); i64 sum = 0;
for(int i = 0;i < M;i ++){
if(!vis[i]) continue;
int u = ufs.find(g[i].u);
int v = ufs.find(g[i].v);
if(u == v) return ;
ufs.link(u,v);
sum = (sum + g[i].w) % K;
} ans = min(ans, sum % K);
return ;
} vis[step] = true;
self(self, edge + 1, step + 1);
vis[step] = false;
self(self, edge, step + 1);
}; dfs(dfs,0,0); cout << ans << '\n'; return 0;
}

AtCoder Beginner Contest 328的更多相关文章

  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. 简约-Markdown教程

    ##注意 * 两个元素之间最好有空行 * 利用\来转义 我是一级标题 ==== 我是二级标题 ---- #我是一级标题 ##我是二级标题 ##<center>标题居中显示</cent ...

  2. P1551 亲戚 题解。。。

    并查集 目录 并查集 (1.概念: (2.详解 Q1:如何表示不同的家族 ans1: Q2:如何将两个人归到同一个家族中 ans2: CODE: PS: (1.概念: 处理 不相交 可合并 的集合关系 ...

  3. arm-gcc 命名规则

    背景 在 Ubuntu中交叉编译裸机程序的时候,注意到了这个问题:因此对此作为一个总结. 命名规则 交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi] ar ...

  4. TI AM64x工业开发板硬件说明书(双核ARM Cortex-A53 + 单/四核Cortex-R5F + 单核Cortex-M4F,主频1GHz)

    前  言 本文主要介绍TL64x-EVM评估板硬件接口资源以及设计注意事项等内容. 创龙科技TL64x-EVM是一款基于TI Sitara系列AM64x双核ARM Cortex-A53 + 单/四核C ...

  5. DVT:华为提出动态级联Vision Transformer,性能杠杠的 | NeurIPS 2021

    论文主要处理Vision Transformer中的性能问题,采用推理速度不同的级联模型进行速度优化,搭配层级间的特征复用和自注意力关系复用来提升准确率.从实验结果来看,性能提升不错 来源:晓飞的算法 ...

  6. 用hive或mr清洗app数据

    1.项目背景 从大量源数据中清洗出有效数据供后续程序使用. 源数据参照log.txt文件 2.项目源数据说明 9841EF7BDBDF0AC9AF42AEBB4E4F8D4F Id 12 状态1 22 ...

  7. require模块化 AMD和CMD

    在CommonJS中,有一个全局性方法require(),用于加载模块.假定有一个数学模块math.js,就可以像下面这样加载. 1 var math = require('math'); 然后,就可 ...

  8. 随机数据下 Sqrt Tree 的平替实现

    原理 在随机数据下,把原序列分成 \(\sqrt n\) 个块,维护每个块的前缀后缀最大值,那么,在随机询问下,对于在一个块中的询问,暴力查询. 复杂度 概率 $ n ^ {-\frac{1}{2}} ...

  9. ubuntu16 安装 python-networkmanager 失败

    前言 ubuntu16 安装 python-networkmanager 失败 解决方案 sudo apt-get install libdbus-1-dev sudo apt-get install ...

  10. Spring声明事务和分布式事务处理技术

    Spring声明事务的两种方式 方式一.传统的编程式事务管理: 需要手动编写代码在业务层注入事务管理模板(一般不用) 方式二.基于 AOP 技术实现的声明式事务管理: Spring 声明式事务管理在底 ...