Codeforces Round #674 (Div. 3) (A - F题题解)
A. Floor Number
https://codeforces.com/contest/1426/problem/A

题意:
一个楼房房间号由 \(1\) 递增,一楼仅2个房间。给定一位用户的房间号和 \(2\)楼以上每层的房间数\(x\)
求出用户所在楼层
思路:
很简单,理解题意即可。
如果 \(n≤2\) ,则答案为1。否则,您可以“删除”第一层,然后答案为 \(⌊\frac{n-3}{x}⌋+ 2。\)
#python
for i in range(int(input())):
n, x = map(int, input().split())
print(1 if n <= 2 else (n - 3) // x + 2)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
//freopen("in.txt", "r", stdin);
ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);
int _; cin >> _; while (_--) {
ll n, x;
cin >> n >> x;
if (n <= 2)cout << 1 << endl;
else cout << (n - 3) / x + 2 << endl;
}
}
B. Symmetric Matrix
https://codeforces.com/contest/1426/problem/B
题目有点长,大家点击链接看原题 或者 题意↓
题意:
给定 n 种 2 x 2大小的方块,问是否能通过这些方块组成 m x m的矩形(需要 \(s[i][k] = s[j][i]\))
思路:
首先,如果m为奇数,则出于显而易见的原因,答案为“否”。 否则,我们会注意到图块的左上角和右下角值无关紧要(因为我们可以对称放置图块)。 因此,我们只需要检查是否有一些图块的右上值等于其左下值(因为这是我们获得主对角线对称性的方式)。
#python
for i in range(int(input())):
n, m = map(int, input().split())
a = []
for i in range(n):
a.append([[int(x) for x in input().split()] for i in range(2)])
ok = False
for i in range(n):
ok |= a[i][0][1] == a[i][1][0]
ok &= m % 2 == 0
print("YES" if ok else "NO")
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
void solve() {
ll n, m;
cin >> n >> m;
ll a, b, c, d;
bool f1 = 0, f2 = 0;
for (int i = 1; i <= n; ++i) {
cin >> a >> b >> c >> d;
if (!f2 && b == c)f2 = 1;
}
if (m % 2 == 0)f1 = 1;
if (f1 && f2)cout << "YES" << endl;
else cout << "NO" << endl;
}
int main() {
//freopen("in.txt", "r", stdin);
ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);
int _; cin >> _; while (_--)solve();
}
C. Increase and Copy
https://codeforces.com/contest/1426/problem/C
题意:
思路:
直观地说,我们首先需要进行所有增量操作,然后才需要复制数字(因为否则我们可以交换移动顺序,并且总和不会减少)。 您可能会注意到答案不超过 \(O(\sqrt{n})\),所以我们可以从1迭代到⌊\(O(\sqrt{n})\)⌋,然后确定要复制的数字。 设为x。 那么我们需要x-1个移动来获得它,还需要⌈\(\frac{n-x}x\)⌉个移动来获得足够数量的副本。 因此,我们可以用此举数来更新答案。
时间复杂度:每个测试用例为\(O(\sqrt{n})\)。
实际上,所需的数字总是非常接近⌊\(O(\sqrt{n})\)⌋,因此只要尝试在[⌊\(O(\sqrt{n})\)⌋-5; ⌊\(O(\sqrt{n})\)⌋ + 5]范围内进行一些选择就足够了。 回答。 这是 \(O(1)\)解决方案。
#include<bits/stdc++.h>
using namespace std;
int main() {
//freopen("in.txt", "r", stdin);
ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
int ans = 1e9;
for (int x = 1; x * x <= n; ++x) {
ans = min(ans, x - 1 + ((n - x) + x - 1) / x);
}
cout << ans << endl;
}
}
D. Non-zero Segments
https://codeforces.com/contest/1426/problem/D

从开始遍历,利用sum去统计前面一段的值。
如果已经出现过,说明会导致有区间和为0的情况出现,ans++并且map clear 重新计数 sum从当前开始.
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
//freopen("in.txt", "r", stdin);
ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);
int n; cin >> n;
map<ll, ll>m;
ll ans = 0, sum = 0, x;
m[0]++;
for (int i = 0; i < n; ++i) {
cin >> x;
sum += x;
if (m[sum] > 0) {
ans++;
sum = x;
m.clear();
m[0]++;
}
m[sum]++;
}
cout << ans;
}
E. Rock, Paper, Scissors
https://codeforces.com/contest/1426/problem/E
Alice 和 Bob这次开始玩猜拳了,给定他们玩的次数n,和石头剪刀布出现的次数,求Alice能赢的最多次数和最少次数。
思路:
赢最多不用说吧?
赢最少, 无非是 拳头被拳头和包吃了, 剪刀被剪刀和石头吃了, 包被拳头和包吃了
抵消完后, 要么你剩下拳头/剪刀/包, 对手剩下剪刀/包/拳头, 这就是你最少赢的
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll q_max(ll x, ll y, ll z, ll h) {
x = x > y ? x : y;
x = x > z ? x : z;
x = x > h ? x : h;
return x;
}
int main() {
//freopen("in.txt", "r", stdin);
ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);
ll n, a, b, c, x, y, z;
cin >> n;
cin >> a >> b >> c >> x >> y >> z;
cout << q_max(0, a - x - z, b - x - y, c - y - z ) << " " << min(a, y) + min(b, z) + min(c, x);
}
F. Number of Subsequences
没做出来
先贴一下dalao的代码留做学习
#include<bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
typedef ll ll;
int main() {
int n; cin >> n;
string ss; cin >> ss;
ll x = 0;
ll ans = 0;
ll temp = 0;
ll num = 1;
for (int i = 0; i < n; i++) {
if (ss[i] == 'a') x += num;
else if (ss[i] == 'b') temp += x;
else if (ss[i] == 'c') ans += temp;
else {
ans = ans * 3 + temp;
temp = temp * 3 + x;
x = x * 3 + num;
num *= 3;
}
num %= mod;
x %= mod; temp %= mod; ans %= mod;
}
cout << ans << endl;
}
学习隔壁 洛绫璃dalao 的写法:
利用模拟思想:
题目问我们能组成 abc 的可能性,需要在3^k的情况取模
先把可能的情况标出来以后再处理
1~~a
2~~?
3~~ab
4~~a?
5~~?b
6~~??
7~~abc
8~~ab?
9~~a?c
10~~?bc
11~~a??
12~~?b?
13~~??c
14~~???
#include <bits/stdc++.h>
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define IOS ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr)
using namespace std;
typedef long long ll;
const int N = 2e5 + 5, mod = 1e9 + 7;
int n, m, _, k;
char s[N];
ll a[20], ans = 0;
int qpow(ll a, ll b) {//快速幂
ll ans = 1; a %= mod;
for (; b; a = a * a % mod, b >>= 1)
if (b & 1) ans = ans * a % mod;
return ans;
}
int main() {
IOS; cin >> n;
cin >> s + 1;
rep(i, 1, n)
if (s[i] == 'a') ++a[1];
else if (s[i] == 'b') {
a[3] += a[1];
a[5] += a[2];
}
else if (s[i] == 'c') {
a[7] += a[3];
a[9] += a[4];
a[10] += a[5];
a[13] += a[6];
}
else {
a[14] += a[6];
a[12] += a[5];
a[11] += a[4];
a[8] += a[3];
a[6] += a[2];
a[4] += a[1];
++a[2];
}
//如果存在这种可能性,利用相应组合计算
if (a[7]) ans = a[7] % mod * qpow(3, a[2]) % mod;
if (a[8]) ans = (ans + a[8] % mod * qpow(3, a[2] - 1) % mod) % mod;
if (a[9]) ans = (ans + a[9] % mod * qpow(3, a[2] - 1) % mod) % mod;
if (a[10]) ans = (ans + a[10] % mod * qpow(3, a[2] - 1) % mod) % mod;
if (a[11]) ans = (ans + a[11] % mod * qpow(3, a[2] - 2) % mod) % mod;
if (a[12]) ans = (ans + a[12] % mod * qpow(3, a[2] - 2) % mod) % mod;
if (a[13]) ans = (ans + a[13] % mod * qpow(3, a[2] - 2) % mod) % mod;
if (a[14]) ans = (ans + a[14] % mod * qpow(3, a[2] - 3) % mod) % mod;
cout << ans;
return 0;
}
Codeforces Round #674 (Div. 3) (A - F题题解)的更多相关文章
- Codeforces Round #609 (Div. 2)前五题题解
Codeforces Round #609 (Div. 2)前五题题解 补题补题…… C题写挂了好几个次,最后一题看了好久题解才懂……我太迟钝了…… 然后因为longlong调了半个小时…… A.Eq ...
- Codeforces Round #599 (Div. 2)的简单题题解
难题不会啊…… 我感觉写这个的原因就是因为……无聊要给大家翻译题面 A. Maximum Square 简单题意: 有$n$条长为$a_i$,宽为1的木板,现在你可以随便抽几个拼在一起,然后你要从这一 ...
- Codeforces Round #674 (Div. 3) C、D 题解
C.Increase and Copy #枚举 题目链接 题意 最初你有仅包含一个数字\(1\)的数组\(a\),一次操作中可对该数组进行两类操作: 从数组中选择一个元素,将该元素\(+1\): 从数 ...
- Lyft Level 5 Challenge 2018 - Final Round (Open Div. 2) (前三题题解)
这场比赛好毒瘤哇,看第四题好像是中国人出的,怕不是dllxl出的. 第四道什么鬼,互动题不说,花了四十五分钟看懂题目,都想砸电脑了.然后发现不会,互动题从来没做过. 不过这次新号上蓝名了(我才不告诉你 ...
- Codeforces Round #573 (Div. 1) 差F
Codeforces Round #573 (Div. 1) E 题意:二维平面上有 n 个点,你可以放至多 m 条直线使得 (0,0) 与每个点的连线至少与一条直线相交.求原点与所有直线的距离最小值 ...
- BestCoder Round #11 (Div. 2) 前三题题解
题目链接: huangjing hdu5054 Alice and Bob 思路: 就是(x,y)在两个參考系中的表示演全然一样.那么仅仅可能在这个矩形的中点.. 题目: Alice and Bob ...
- Codeforces Round #674 (Div. 3) F. Number of Subsequences 题解(dp)
题目链接 题目大意 给你一个长为d只包含字符'a','b','c','?' 的字符串,?可以变成a,b,c字符,假如有x个?字符,那么有\(3^x\)个字符串,求所有字符串种子序列包含多少个abc子序 ...
- Codeforces Round #600 (Div. 2)E F
题:https://codeforces.com/contest/1253/problem/E 题意:给定n个信号源,俩个参数x和s,x代表这个信号源的位置,s代表这个信号源的波及长度,即这个信号源可 ...
- Codeforces Round #346 (Div. 2) E F
因为很久没有个人认真做题了 昨天晚上开了场虚拟cf来锻炼个人手速 选的是第一次做cf的场 那时候7出3还被hack...之后也没补题 这次做的时候顺便回忆了一下以前比赛的时候是怎么想的 发现经验还是很 ...
- Codeforces Round #336 (Div. 2)-608A.水题 608B.前缀和
A题和B题... A. Saitama Destroys Hotel time limit per test 1 second memory limit per test 256 megabyte ...
随机推荐
- 基于OpenAi通用特定领域的智能语音小助手
无穷尽的Q&A 钉钉...钉钉... 双双同学刚到工位,报销答疑群的消息就万马纷沓而来.她只能咧嘴无奈的摇摇头.水都还没有喝一口就开始"人工智能"的去回复.原本很阳光心情开 ...
- C#中的类和继承
公众号「DotNet学习交流」,分享学习DotNet的点滴. 类继承 通过继承我们可以定义一个新类,新类纳入一个已经声明的类并进行扩展. 可以使用一个已经存在的类作为新类的基础.已存在的类称为基类(b ...
- 文心一言 VS 讯飞星火 VS chatgpt (155)-- 算法导论12.3 2题
二.用go语言,假设通过反复向一棵树中插人互不相同的关键字来构造一棵二叉搜索树.证明:在这棵树中查找关键字所检查过的结点数目等于先前插入这个关键字所检查的结点数目加 1. 文心一言: 为了证明这个结论 ...
- 01 MyBatis第一个应用程序
1.MyBatis是什么? mybatis是一个基于java的持久层框架. 2.什么是持久化 数据由瞬态状态变为持久状态. 3.持久层: 完成持久化工作的代码块. -- DAO层,将数据存到数据库 4 ...
- pytest+allure+jenkins+python+git,实现Linux服务器看测试报告,并发送邮件通知
1.简介 pytest:一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高. allure:是开源测试报告框架. jenkins:持 ...
- 免费背景音人声分离解决方案MVSEP-MDX23,足以和Spleeter分庭抗礼
在音视频领域,把已经发布的混音歌曲或者音频文件逆向分离一直是世界性的课题.音波混合的物理特性导致在没有原始工程文件的情况下,将其还原和分离是一件很有难度的事情. 言及背景音人声分离技术,就不能不提Sp ...
- Havoc C2d的初次使用
Havoc C2 简介 Havoc是一款现代化的.可扩展的后渗透命令控制框架 当前的Havoc版本还处于早期开发版,随着框架的不断成熟,可能会对Havoc的API和核心结构进行大量更改 以下的配置部分 ...
- 【scikit-learn基础】--『监督学习』之 逻辑回归分类
逻辑回归这个算法的名称有一定的误导性.虽然它的名称中有"回归",当它在机器学习中不是回归算法,而是分类算法.因为采用了与回归类似的思想来解决分类问题,所以它的名称才会是逻辑回归. ...
- CSS实例-切换开关
在线展示: 矩形开关 .switch { position: relative; display: inline-block; width: 60px; height: 34px } .switch ...
- HDU 6203 ping ping ping 最近公共祖先 树状数组
原题链接 题意 给我们一棵n+1节点,n条边的树,然后给我们p条路径(每条路径给出两个端点).我们需要从树上选出一些点,使得每条路径都至少包含我们选出的一个点.求最少选多少点. 思路 以1为根,我们可 ...