Codeforces Round 878 (Div3)
B. Binary Cafe
\(1 \leq n,k \leq 10^9\)
题解:思维
- 考虑两种情况
- 第一种:钱足够多,每种咖啡都可以买的情况下,答案为\(2^k\)
- 第二种:钱不够多,因为任一面值的钱数都有唯一的二进制表达方式,所以答案为\(n + 1\)
- 所以我们不妨先判断一下\(2^k\)有没有超过\(10^9\),如果超过了说明钱一定不够多,否则答案为\(min(2^k,n+1)\)
#include <bits/stdc++.h>
#define Zeoy std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0)
#define all(x) (x).begin(), (x).end()
#define rson id << 1 | 1
#define lson id << 1
#define int long long
#define mpk make_pair
#define endl '\n'
using namespace std;
typedef unsigned long long ULL;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<double, double> pdd;
const int inf = 0x3f3f3f3f;
const ll INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 + 7;
const double eps = 1e-9;
const int N = 2e5 + 10, M = 4e5 + 10;
void solve()
{
int n, k;
cin >> n >> k;
if (k >= 30)
{
cout << n + 1 << endl;
}
else
cout << min(n + 1, (1LL << k)) << endl;
}
signed main(void)
{
Zeoy;
int T = 1;
cin >> T;
while (T--)
{
solve();
}
return 0;
}
C. Ski Resort
题解:组合计数
- 我们不妨将连续的可以度假的时间看成一个线段
- 那么我们需要在这个线段中挑选连续的子线段作为一种方案
- 容易发现我们可以使用捆绑法后即可得到答案
- 假设线段长度为\(len\),且\(len >= k\),那么答案应该为\(\frac{(len - k + 1) \times (len - k + 2)}{2}\)
#include <bits/stdc++.h>
#define Zeoy std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0)
#define all(x) (x).begin(), (x).end()
#define rson id << 1 | 1
#define lson id << 1
#define int long long
#define mpk make_pair
#define endl '\n'
using namespace std;
typedef unsigned long long ULL;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<double, double> pdd;
const int inf = 0x3f3f3f3f;
const ll INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 + 7;
const double eps = 1e-9;
const int N = 2e5 + 10, M = 4e5 + 10;
int n, k, q;
int a[N];
int A(int a, int b)
{
int res = 1;
for (int i = a, j = 1; j <= b; --i, ++j)
{
res *= a;
}
return res;
}
void solve()
{
cin >> n >> k >> q;
for (int i = 1; i <= n; ++i)
cin >> a[i];
// cout << n << " " << k << " " << q << endl;
int len = 0;
int ans = 0;
for (int i = 1; i <= n; ++i)
{
if (a[i] <= q)
len++;
else
{
if (len >= k)
{
int t = len;
while (t >= k)
{
ans += A(t - k + 1, 1);
t--;
}
}
len = 0;
}
}
if (len >= k)
{
int t = len;
while (t >= k)
{
ans += A(t - k + 1, 1);
t--;
}
}
cout << ans << endl;
}
signed main(void)
{
Zeoy;
int T = 1;
cin >> T;
while (T--)
{
solve();
}
return 0;
}
E. Character Blocking
题解:模拟
- 我们不妨记录初始状态下两个字符串之间有\(cnt\)个字符不相同
- 对于封锁操作以及解锁我们可以利用邻接表思想实现
- 对于交换操作,我们正常模拟,并维护\(cnt\)
- 对于检查操作,如果\(cnt=0\),那么相等,否则不相等
- 所以整个模拟过程的核心就是维护好两个字符串之间有多少个字符不相同
#include <bits/stdc++.h>
#define Zeoy std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0)
#define all(x) (x).begin(), (x).end()
#define rson id << 1 | 1
#define lson id << 1
#define int long long
#define mpk make_pair
#define endl '\n'
using namespace std;
typedef unsigned long long ULL;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<double, double> pdd;
const int inf = 0x3f3f3f3f;
const ll INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 + 7;
const double eps = 1e-9;
const int N = 4e5 + 10, M = 4e5 + 10;
int t, q;
vector<int> g[N];
void solve()
{
string s1, s2;
cin >> s1 >> s2;
cin >> t >> q;
for (int i = 1; i <= q + 10; ++i)
g[i].clear();
int cnt = 0;
for (int i = 0; i < s1.size(); ++i)
if (s1[i] != s2[i])
cnt++;
s1 = " " + s1;
s2 = " " + s2;
vector<int> vis(s1.size() + 10);
// cout << cnt << endl;
for (int i = 1; i <= q; ++i)
{
int op, p, l, r, p1, p2;
cin >> op;
while (g[i].size())
{
int pos = g[i].back();
vis[pos] = 0;
if (s1[pos] != s2[pos])
cnt++;
g[i].pop_back();
}
if (op == 1)
{
cin >> p;
vis[p] = 1;
g[i + t].push_back(p);
if (s1[p] != s2[p])
cnt--;
}
else if (op == 2)
{
cin >> l >> p1 >> r >> p2;
if (l == 1 && r == 1)
{
if (s1[p1] != s2[p1] && !vis[p1])
cnt--;
if (s1[p2] != s2[p2] && !vis[p2])
cnt--;
swap(s1[p1], s1[p2]);
if (s1[p1] != s2[p1] && !vis[p1])
cnt++;
if (s1[p2] != s2[p2] && !vis[p2])
cnt++;
}
else if (l == 1 && r == 2)
{
if (s1[p1] != s2[p1] && !vis[p1])
cnt--;
if (s1[p2] != s2[p2] && !vis[p2])
cnt--;
swap(s1[p1], s2[p2]);
if (s1[p1] != s2[p1] && !vis[p1])
cnt++;
if (s1[p2] != s2[p2] && !vis[p2])
cnt++;
}
else if (l == 2 && r == 1)
{
if (s1[p1] != s2[p1] && !vis[p1])
cnt--;
if (s1[p2] != s2[p2] && !vis[p2])
cnt--;
swap(s2[p1], s1[p2]);
if (s1[p1] != s2[p1] && !vis[p1])
cnt++;
if (s1[p2] != s2[p2] && !vis[p2])
cnt++;
}
else if (l == 2 && r == 2)
{
if (s1[p1] != s2[p1] && !vis[p1])
cnt--;
if (s1[p2] != s2[p2] && !vis[p2])
cnt--;
swap(s2[p1], s2[p2]);
if (s1[p1] != s2[p1] && !vis[p1])
cnt++;
if (s1[p2] != s2[p2] && !vis[p2])
cnt++;
}
}
else
{
if (cnt == 0)
cout << "YES" << endl;
else
cout << "NO" << endl;
}
}
}
signed main(void)
{
Zeoy;
int T = 1;
cin >> T;
while (T--)
{
solve();
}
return 0;
}
Codeforces Round 878 (Div3)的更多相关文章
- 【赛时总结】◇赛时·V◇ Codeforces Round #486 Div3
◇赛时·V◇ Codeforces Round #486 Div3 又是一场历史悠久的比赛,老师拉着我回来考古了……为了不抢了后面一些同学的排名,我没有做A题 ◆ 题目&解析 [B题]Subs ...
- CodeForces Round #527 (Div3) B. Teams Forming
http://codeforces.com/contest/1092/problem/B There are nn students in a university. The number of st ...
- CodeForces Round#480 div3 第2场
这次div3比上次多一道, 也加了半小时, 说区分不出1600以上的水平.(我也不清楚). A. Remove Duplicates 题意:给你一个数组,删除这个数组中相同的元素, 并且保留右边的元素 ...
- CODEFORCES ROUND#624 DIV3
这次比赛从名字就可以看出非常水,然鹅因为第一次打codeforces不太熟悉操作只来的及做签到题(还错了一次) A,B,C都是签到题考点思维就不写了 D题 https://codeforces.ml/ ...
- A. Launch of Collider Codeforces Round #363 (Div2)
A. Launch of Collider time limit per test 2 seconds memory limit per test 256 megabytes input standa ...
- CodeForces Round #527 (Div3) D2. Great Vova Wall (Version 2)
http://codeforces.com/contest/1092/problem/D2 Vova's family is building the Great Vova Wall (named b ...
- CodeForces Round #527 (Div3) D1. Great Vova Wall (Version 1)
http://codeforces.com/contest/1092/problem/D1 Vova's family is building the Great Vova Wall (named b ...
- CodeForces Round #527 (Div3) C. Prefixes and Suffixes
http://codeforces.com/contest/1092/problem/C Ivan wants to play a game with you. He picked some stri ...
- CodeForces Round #527 (Div3) A. Uniform String
http://codeforces.com/contest/1092/problem/A You are given two integers nn and kk. Your task is to c ...
- 「暑期训练」「Brute Force」 Optimal Point on a Line (Educational Codeforces Round 16, B)
题意 You are given n points on a line with their coordinates $x_i$. Find the point x so the sum of dis ...
随机推荐
- 在 Web 中判断页面是不是刷新
在 Web 开发中,我们经常需要区分用户是否通过刷新操作重新加载了页面.这一操作可能是由用户手动刷新(如按下 F5 键或点击浏览器刷新按钮)或通过浏览器自动重新加载.判断页面是否刷新有助于开发者优化用 ...
- 一文快速上手-Vue CLI脚手架
目录 安装Vue CLI Vue CLI新建项目 vue.js 3 项目目录结构 项目的运行和打包 vue.config.js文件解析 安装Vue CLI (1) 全局安装Vue CLI 方式一(推荐 ...
- ASP.NET Core – Work with Environment (Development, Staging, Production)
前言 这篇讲一讲发布和环境 (development, staging, production) 介绍 我的网站是 host 在 Azure 的 Virtual Machine, 跑 IIS, 没有使 ...
- ASP.NET Core – Program.cs and Startup.cs 小笔记
前言 ASP.NET Core 6.0 以后, 默认模板去掉了 Program.cs 的 namespace, class 和 Startup.cs, 一开始看会有点懵. 这篇大概记入一下, prog ...
- vscode废掉了,跳转不到函数定义,无法自动补全,重装也没用的解决办法
1. 先卸载掉所有已安装的插件 2. 卸载vscode 3. 删除个人配置和插件配置,涉及两个文件夹 4. 需要安装C/C++组件,下载对应的vsix文件 下载地址: https://github.c ...
- 《Vue.js 设计与实现》读书笔记 - 第10章、双端 Diff 算法
第10章.双端 Diff 算法 10.1 双端比较的原理 上一章的移动算法并不是最优的,比如我们把 ABC 移动为 CAB,如下 A C B --> A C B 按照上一章的算法,我们遍历新的数 ...
- UEFI原理与编程(二)
系统表 对UEFI应用程序和驱动程序开发人员来讲,系统表是最重要的数据结构之一,它是用户空间通往内核空间的通道.有了它,UEFI应用程序和驱动才可以访问UEFI内核.硬件资源和I/O设备. 1 在应用 ...
- 自签openssl证书(包含泛域名)
1.安装openSSL weget http://www.openssl.org/source/openssl-1.0.0a.tar.gz Tar -zxvf openssl-1.0.0a.tar.g ...
- vue3实现多层级的动态表单增减
.markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...
- 华为云-容器引擎CCE-部署Nginx应用
环境准备 注册华为云账号 复制下面地址到浏览器地址栏(https://reg.huaweicloud.com/registerui/cn/register.html?fromacct=c76cea9f ...


