题目地址

https://atcoder.jp/contests/abc146/tasks

感觉没有什么有意思的题...

题解

A

#include <bits/stdc++.h>
using namespace std; string s; int main() {
cin >> s; int now = 0;
if(s[0] == 'S') {
if(s[1] == 'U') now = 0;
else now = 6;
}
if(s[0] == 'M') now = 1;
if(s[0] == 'T') {
if(s[1] == 'U') now = 2;
else now = 4;
}
if(s[0] == 'W') now = 3;
if(s[0] == 'F') now = 5;
printf("%d\n", 7 - now);
}

B

#include <bits/stdc++.h>
using namespace std; char s[10000]; int main() {
int n; cin >> n;
scanf("%s", s);
int len = strlen(s);
for(int i = 0; i < len; ++i) {
s[i] -= 'A';
}
for(int i = 0; i < len; ++i) {
s[i] += n;
s[i] %= 26;
}
for(int i = 0; i < len; ++i) putchar(s[i] + 'A');
return 0;
}

C

不难发现\(n\)和\(d(n)\)都是递增的。那么二分\(n\)即可。

注意数字上限是\(10^9\)。我一开始直接大力\(10^{18}\)结果wa了2发。

#include <bits/stdc++.h>
using namespace std; const int N = 100010; int n, c[N];
int x[N], y[N], deg[N], g[N];
int cnt, head[N];
struct edge {int to, nxt, id;} e[N << 1]; void ins(int u, int v, int id) {
e[++cnt] = (edge) {v, head[u], id};
head[u] = cnt;
} void dfs(int u, int fa, int col) {
int now = 0;
for(int i = head[u]; i; i = e[i].nxt) {
int v = e[i].to;
if(v == fa) continue;
++now;
if(now == col) ++now;
g[e[i].id] = now;
dfs(v, u, now);
}
} int main() {
cin >> n;
for(int i = 1; i < n; ++i) {
cin >> x[i] >> y[i];
deg[x[i]]++; deg[y[i]]++;
ins(x[i], y[i], i), ins(y[i], x[i], i);
}
int ans = 0;
for(int i = 1; i <= n; ++i)
if(deg[i] > deg[ans]) ans = i;
cout << deg[ans] << endl;
dfs(ans, ans, 0);
for(int i = 1; i < n; ++i) printf("%d\n", g[i]);
}

D

显然答案是最大度数。随便钦定个点为根然后遍历一遍,记录一下入边的颜色就可以染色了。

#include <bits/stdc++.h>
using namespace std; const int N = 100010; int n, c[N];
int x[N], y[N], deg[N], g[N];
int cnt, head[N];
struct edge {int to, nxt, id;} e[N << 1]; void ins(int u, int v, int id) {
e[++cnt] = (edge) {v, head[u], id};
head[u] = cnt;
} void dfs(int u, int fa, int col) {
int now = 0;
for(int i = head[u]; i; i = e[i].nxt) {
int v = e[i].to;
if(v == fa) continue;
++now;
if(now == col) ++now;
g[e[i].id] = now;
dfs(v, u, now);
}
} int main() {
cin >> n;
for(int i = 1; i < n; ++i) {
cin >> x[i] >> y[i];
deg[x[i]]++; deg[y[i]]++;
ins(x[i], y[i], i), ins(y[i], x[i], i);
}
int ans = 0;
for(int i = 1; i <= n; ++i)
if(deg[i] > deg[ans]) ans = i;
cout << deg[ans] << endl;
dfs(ans, ans, 0);
for(int i = 1; i < n; ++i) printf("%d\n", g[i]);
}

E

唯一一个需要想一想的题。

考虑题目所求为\(s[r] - s[l] \equiv r - l \mod k\),移项一下就是\(s[r] - r \equiv s[l] - l \mod k\)

然后直接拿个map什么的东西算一算就行了。

注意判断\(r-l\)大于\(k\)的情况,是不合法情况。

/*
s[r] - s[l] = r - l (mod k)
s[r] - r = s[l] - l (mod k)
*/
#include <bits/stdc++.h>
using namespace std; typedef long long ll;
const int N = 200010; int n, k;
ll s[N];
map<ll,ll>S; int main() {
cin >> n >> k;
for(int i = 1, x; i <= n; ++i) {
cin >> x;
s[i] = s[i - 1] + x;
}
S[0] = 1;
ll ans = 0;
int l = 0;
// for(int i = 1; i <= n; ++i) printf("%d ", (s[i] - i + k) % k);
// puts("");
for(int i = 1; i <= n; ++i) {
if(i >= k) {S[(s[l] - l + k) % k]--; ++l;}
ans += S[(s[i] - i + k) % k];
// printf("%d ", S[(s[i] - i + k) % k]);
S[(s[i] - i + k) % k]++;
}//puts("");
printf("%lld\n", ans);
return 0;
}

F

直接单调队列优化dp即可。dp的时候记录一下转移点。复杂度\(O(n)\)

#include <bits/stdc++.h>
using namespace std; typedef long long ll;
const int N = 200010; int n, m, f[N], g[N], st[N], top;
char s[N];
struct Node {int v, id;};
deque<Node>q; int main() {
memset(g, -1, sizeof(g));
memset(f, 0x3f, sizeof(f));
scanf("%d%d", &n, &m);
scanf("%s", s);
f[0] = 0; q.push_back({f[0], 0});
for(int i = 1; i <= n; ++i) {
while(!q.empty() && i - q.front().id > m) q.pop_front();
if(s[i] == '1') continue;
if(!q.empty()) f[i] = q.front().v + 1, g[i] = q.front().id;
while(!q.empty() && q.back().v > f[i]) q.pop_back();
if(f[i] != 0x3f3f3f3f) q.push_back({f[i], i});
}
if(g[n] == -1) return puts("-1"), 0;
int now = n;
while(g[now] != -1) {st[++top] = now - g[now], now = g[now];}
while(top) printf("%d ", st[top--]);
puts("");
}

AtCoder Beginner Contest 146解题报告的更多相关文章

  1. AtCoder Beginner Contest 122 解题报告

    手速选手成功混进rated only里面的前30名,但是总排名就到110+了... A - Double Helix #include <bits/stdc++.h> #define ll ...

  2. Atcoder Beginner Contest 124 解题报告

    心态爆炸.本来能全做出来的.但是由于双开了Comet oj一个比赛,写了ABC就去搞那个的B题 还被搞死了. 回来写了一会D就过了.可惜比赛已经结束了.真的是作死. A - Buttons #incl ...

  3. AtCoder Beginner Contest 118 解题报告

    A - B +/- A #include <bits/stdc++.h> int main() { int a, b; std::cin >> a >> b; b ...

  4. AtCoder Beginner Contest 120 解题报告

    为啥最近都没有arc啊... A - Favorite Sound #include <algorithm> #include <iostream> #include < ...

  5. AtCoder Beginner Contest 117 解题报告

    果然abc都是手速场. 倒序开的qwq. D题因为忘记1e12二进制几位上界爆了一发. A - Entrance Examination 就是除一下就行了... 看样例猜题意系列. #include& ...

  6. AtCoder Beginner Contest 132 解题报告

    前四题都好水.后面两道题好难. C Divide the Problems #include <cstdio> #include <algorithm> using names ...

  7. AtCoder Beginner Contest 129 解题报告

    传送门 写了四个题就跑去打球了.第五题应该能肝出来的. A - Airplane #include <bits/stdc++.h> using namespace std; inline ...

  8. AtCoder Beginner Contest 127 解题报告

    传送门 非常遗憾.当天晚上错过这一场.不过感觉也会掉分的吧.后面两题偏结论题,打了的话应该想不出来. A - Ferris Wheel #include <bits/stdc++.h> u ...

  9. AtCoder Beginner Contest 126 解题报告

    突然6道题.有点慌.比赛写了五个.罚时爆炸.最后一个时间不太够+没敢写就放弃了. 两道题奇奇怪怪的WJ和20/20.今天的评测机是怎么了. A Changing a Character #includ ...

随机推荐

  1. JConsole远程配置

    JConsole是JDK自带的内存监控工具 1.linux配置tomcat-9.x 修改setenv.sh文件(默认没有的,需自己创建),增加配置: #!/bin/sh JAVA_HOME=/usr/ ...

  2. 命名法:骆驼(Camel)、帕斯卡(pascal)、匈牙利(Hungarian)、下划线(_)

    首先欢迎大家到来! 常用的命名法:骆驼(Camel).帕斯卡(pascal).匈牙利(Hungarian).下划线(_) 骆驼:是指混合使用大小写字母来构成变量和函数的名字 帕斯卡:与骆驼命名法类似只 ...

  3. C语言学习系列笔记

    1.小甲鱼 C语言教程系列

  4. docker 学习操作记录 5-2

    记录5-2 root@53d0a643a2c7:/# quit bash: quit: command not found root@53d0a643a2c7:/# exit exit -->@ ...

  5. vim文本编辑器的使用

    1.简介 vim是vi发展过来的一款文本编辑器,功能非常强大. 2.vim的工作模式 vim有三种工作模式,分别为命令模式.编辑模式.末行模式: 1)命令模式:打开文件之后,默认进入命令模式: 2)编 ...

  6. jquery.i18n.properties前端国际化方案

    如果新项目要做系统国际化, 时下热门的任何一种技术选型都有成熟的方案,比如: vue + vue-i18n angular + angular-translate react + react-intl ...

  7. [转帖]UML类图关系图解

    UML类图关系图解 https://www.cnblogs.com/TvvT-kevin/p/9357339.html 一.类结构 在类的UML图中,使用长方形描述一个类的主要构成,长方形垂直地分为三 ...

  8. windows下隐藏磁盘分区(转)

    在一定情况下有的人会想隐藏掉部分分区,比如双系统的情况 有两种方式 方法1: 删除盘符,适合在双系统的情况下隐藏掉另外一个系统相关的分区 请注意是删除盘符 不是删除分区 此电脑右键管理 点击磁盘管理 ...

  9. iphone如何安装mitmproxy的pem文件(当iphone无法使用邮箱时)

    背景描述: 我要安装mitmproxy描述文件 mitmproxy-ca-cert.pem , 说是用iphone自带的邮箱接收然后安装即可,但悲剧的邮箱坏了[提示:无法连接服务器],查了不少方法都无 ...

  10. Java学习: 面向对象的使用与注意事项

    面向对象的使用与注意事项 面向过程:当需要实现一个功能的时候,每一个具体的步骤都需要亲力,详细处理每一个细节面向对象:当需要实现一个功能的时候,不关心具体的步骤,而是找一个已经具有该功能的人,来帮我做 ...