Codeforces Round 961 (Div. 2)
题目链接:Codeforces Round 961 (Div. 2)
总结:B1wa两发可惜,C出得有点小慢。
A. Diagonals
fag:贪心
Description:给定一个\(n * n\)的棋盘,给定\(k\)个棋子,每个格子只能放一个棋子,求将棋子全部放入棋盘,至少需要占几条对角线。
Solution:求最少占用,显然贪心处理,从最长的对角线开始占用,对角线长度为\(n, n - 1, n - 1, n - 2, n - 2, ..., 1, 1\)。
void solve(){
cin >> n >> k;
int res = 0;
if (k == 0){
cout << 0 << endl;
}
else{
if (k <= n)
cout << 1 << endl;
else{
res = 1;
k -= n;
for (int i = n - 1; i; i --){
k -= i;
res ++;
if (k <= 0){
cout << res << endl;
return;
}
k -= i;
res ++;
if (k <= 0){
cout << res << endl;
return;
}
}
}
}
}
B1. Bouquet (Easy Version)
fag: 模拟
Description:有\(n\)种花,每种花只用一朵,每种花的花瓣为\(a_i\),售价也为\(a_i\)。你有\(m\)元钱,问你最多能够买到多少花瓣(任意两朵花的花瓣之差不能超过\(1\))。
Solution:easy版,解法很多。这里使用前缀和+二分。
- 先按花瓣数从小到大排序。然后开始枚举,二分找到当前花瓣 + 1的最大下标\(t\);花费不超过\(k\)的最大下标\(tt\),取\(min(t, tt)\)。
Competing:第一发细节错误;第二发没考虑到花费不超过\(k\)的下标,认为满足花瓣数的都能买。
void solve(){
cin >> n >> k;
vector<int> a(n + 1);
vector<int> s(n + 1);
for (int i = 1; i <= n; i ++){
cin >> a[i];
}
sort(a.begin(), a.end());
for (int i = 1; i <= n; i ++){
s[i] = s[i - 1] + a[i];
}
int res = 0;
for (int i = 1; i <= n; i ++){
if (a[i] > k)
continue;
int t = upper_bound(a.begin() + 1, a.end(), a[i] + 1) - a.begin();
int tt = upper_bound(s.begin() + 1, s.end(), s[i - 1] + k) - s.begin();
if (tt <= t){
res = max(res, s[tt - 1] - s[i - 1]);
}
else{
res = max(res, s[t - 1] - s[i - 1]);
}
}
cout << min(k, res) << endl;
}
B2. Bouquet (Hard Version)
fag:思维 + 贪心
Description:与easy的区别为,每种花有\(c_i\)朵。
Solution:考虑使用花瓣数为\(i\)和\(i +1\)的花,先尽可能使用买第一种花,剩下的买第二种花;然后尽可能使用第二种花替代第一种花即可。
Competing:应该是能想到的吧,毕竟只能买两种花
void solve(){
cin >> n >> k;
vector<pii> a(n);
for (int i = 0; i < n; i ++)
cin >> a[i].fi;
for (int i = 0; i < n; i ++)
cin >> a[i].se;
sort(a.begin(), a.end());
int ans = 0;
for (int i = 0; i < n; i ++){
// 尽可能买第一种花
int t = k / a[i].fi;
t = min(t, a[i].se);
ans = max(ans, t * a[i].fi);
if (a[i].fi + 1 != a[i + 1].fi || i + 1 == n)
continue;
// 剩下的买第二种花
int res = k - t * a[i].fi;
int tt = res / a[i + 1].fi;
tt = min(tt, a[i + 1].se);
res = res - tt * a[i + 1].fi;
ans = max(ans, k - res);
if (t == 0)
continue;
// 还剩多少
tt = a[i + 1].se - tt;
ans = max(ans, k - res + max(0LL, min({res, tt, t})));
if (ans == k){
cout << ans << endl;
return;
}
}
cout << ans << endl;
}
C. Squaring
fag:分析
Description:给定一个数组,可以执行任意次操作,每次操作将每个数变为它的平方,求该数组变为不递减数组的最小操作次数。
Solution:显然,我们直接从前往后操作即可,但是直接平方会导致数很大,从而爆longlong。
- 那我们试试记录前面的数执行了多少次操作,根据开始两数之前的关系能否得出该数应该执行的操作次数。
- 对两个数取对数,\(2^xa_{i} <= 2^ya_{i+ 1}\),我们发现两个数的操作次数\(x, y\)只与最开始的值有关。
- 我们开始预处理:如果\(a[i] < a[i - 1]\),我们令\(b[i]\)为\(a[i] >= a[i - 1]\)的操作次数;如果\(a[i] == a[i - 1]\),令\(b[i] == 0\)。如果\(a[i] > a[i - 1]\),令\(b[i]\)等于负的\(a[i - 1]\)大于等于\(a[i]\)的操作次数,相当于可以少执行几次操作。但是我们要注意如果刚好可以令\(a[i] == a[i - 1]\),那么\(b[i]\)不变,否则\(b[i]\)需要加\(1\),因为此时\(a[i - 1] > a[i]\)了。
void solve(){
cin >> n;
vector<int> a(n);
vector<int> b(n);
for (int i = 0; i < n; i ++){
cin >> a[i];
}
int ans = 0;
for (int i = 1; i < n; i ++){
if (a[i] < a[i - 1]){
if (a[i] == 1){
cout << -1 << endl;
return;
}
else{
int t = a[i];
int c = 0;
while (t < a[i - 1]){
t *= t;
c ++;
}
b[i] = c;
}
}
else if (a[i] == a[i - 1]){
b[i] = 0;
}
else{
int t = a[i - 1];
if (t == 1)
continue;
int c = 0;
while (t < a[i]){
t *= t;
c ++;
}
if (t == a[i])
b[i] = -c;
else
b[i] = -c + 1;
}
}
for (int i = 1; i < n; i ++){
b[i] += b[i - 1];
if (b[i] < 0)
b[i] = 0;
ans += b[i];
}
cout << max(ans, 0LL) << endl;
}
Codeforces Round 961 (Div. 2)的更多相关文章
- Codeforces Round #366 (Div. 2) ABC
Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...
- Codeforces Round #354 (Div. 2) ABCD
Codeforces Round #354 (Div. 2) Problems # Name A Nicholas and Permutation standard input/out ...
- Codeforces Round #368 (Div. 2)
直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...
- cf之路,1,Codeforces Round #345 (Div. 2)
cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅..... ...
- Codeforces Round #279 (Div. 2) ABCDE
Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems # Name A Team Olympiad standard input/outpu ...
- Codeforces Round #262 (Div. 2) 1003
Codeforces Round #262 (Div. 2) 1003 C. Present time limit per test 2 seconds memory limit per test 2 ...
- Codeforces Round #262 (Div. 2) 1004
Codeforces Round #262 (Div. 2) 1004 D. Little Victor and Set time limit per test 1 second memory lim ...
- Codeforces Round #371 (Div. 1)
A: 题目大意: 在一个multiset中要求支持3种操作: 1.增加一个数 2.删去一个数 3.给出一个01序列,问multiset中有多少这样的数,把它的十进制表示中的奇数改成1,偶数改成0后和给 ...
- Codeforces Round #268 (Div. 2) ABCD
CF469 Codeforces Round #268 (Div. 2) http://codeforces.com/contest/469 开学了,时间少,水题就不写题解了,不水的题也不写这么详细了 ...
- 贪心+模拟 Codeforces Round #288 (Div. 2) C. Anya and Ghosts
题目传送门 /* 贪心 + 模拟:首先,如果蜡烛的燃烧时间小于最少需要点燃的蜡烛数一定是-1(蜡烛是1秒点一支), num[g[i]]记录每个鬼访问时已点燃的蜡烛数,若不够,tmp为还需要的蜡烛数, ...
随机推荐
- 如何挑选海外4G模组?这里有秘籍!
今天我会告诉大家如何挑选海外4G模组,我会把优势给贴出作为参考.去过国外的都知道国外4G网络各种状况实在让人无力吐槽,做海外设备的朋友,是时候了解一下Air780EEN/EEU/EEJ系列海外模组-- ...
- 一文讲透 FPGA CDC 多bit跨时钟域同步-hand-shanking机制
一.背景 数据的跨时钟域处理是FPGA开发过程中的常见问题,存在两种情况 慢时钟向快时钟同步:只需在快时钟域打两拍即可.其RTL如下: 打拍同步的原理:大家在初学FPGA时,经常听过FPGA中对信号打 ...
- STATA数据统计软件学习记录
STATA是一个数据统计软件,正如它的名字一样,STATA=statistic+data.STATA软件的功能和matlab类似,也可以用代码实现数据的统计与可视化.但几乎只能进行整行整列的数据处理, ...
- 深入理解ReferenceQueue GC finalize Reference
关于对象如何销毁以及finalize更详细的信息 目录 概述 1 先看一个对象finalize的顺序问题. 2 对象再生及finalize只能执行一次 3 SoftReference WeakRefe ...
- LonEle 操作的 SQL Server 数据库(msde2000)由 20180418 版更新至 20190328 版(非官方)
Shanghai Mitsubishi Elevator Co., Ltd(上海三菱电梯有限公司) 的 Comprehensive Elevator Monitoring System (电梯综合监控 ...
- NFS服务搭建过程
NFS服务 [1].nfs配置 作用: 解决数据一致性问题 NFS服务程序的配置文件为/etc/exports,需要严格按照共享目录的路径 允许访问的NFS客户端(共享权限参数)格式书写,定义要共享的 ...
- 【C#】【平时作业】习题-5-类的基础知识
一.概念题 1. 举例说明什么是类,什么是对象,并说明类与对象的关系? 类:具有相同特性(数据元素)和行为(功能)的对象的抽象就是类. 对象:对象是人们要进行研究的任何事物,它不仅能表示具体的事物,还 ...
- 第 5 章 Debian 系统中可用的软件
目录 5.1. Debian GNU/Linux 收录了哪些类型的应用程序和开发工具? 5.2. 谁编写了所有这些软件? 5.3. 我应该如何获得一份 Debian 打包的程序的最新列表? 5.4. ...
- Qt开源作品19-通用数据库翻页查询
一.前言 在Qt与数据库结合编程的过程中,记录一多,基本上都需要用到翻页查看记录,翻页有个好处就是可以减轻显示数据的表格的压力,不需要一次性将数据库表的记录全部显示,也基本上没有谁在一页上需要一次性显 ...
- [转]axios 的理解和使用
有废话少说,直接附上原文链接: axios 的理解和使用 axios.create(对axios请求进行二次封装) 拦截器 取消请求(axios.CancelToken) 其它链接: 1.axios中 ...