Codeforces 2025/6/11 日志

B. Kevin and Geometry

题目大意:给你一堆木棒,问你是否能从中取4跟组成等腰梯形

#1 考虑等腰梯形的构造条件

思路:等腰梯形的两腰要相等且越大越好,从大到小枚举,符合条件则取出并删除,然后再遍历上下底边,只需上下底边只差小于2*腰长即可

代码:

int n; cin>>n;

vector<int> v(n);

for (int i = 0; i < n; i++)

cin>>vi;

sort(v.begin(),v.end(),greater<int>());

int u = 0,k = 0,w = 0;

for (int i = 1; i < n; i++)

if (vi == vi - 1)

{

u = vi;

v.erase(find(v.begin(),v.end(),u));

v.erase(find(v.begin(),v.end(),u));

break;

}

for (int i = 1; i < v.size(); i++)

if (vi-1 - vi < 2 * u)

{

k = vi-1;

w = vi;

break;

}

if (u && k && w) cout<<u<<" "<<u<<" "<<k<<" "<<w<<endl;

else cout<<-1<<endl;

D. Subtract Min Sort

题目大意:一个由正整数组成的序列,问你能否通过无限次的选择索引i,让ai和a(i+1)减去min(ai,ai+1)的方法,得到一个非递减序列

思路:

每次操作可以看作把其中较小数变成 0,较大的数变成 ∣ai​−ai−1​∣。如果 ai​>ai+1​ 的话,操作后 ai+1​ 会变成 0,而此时必须 a1​ 到 ai​ 全部为 0 才能满足条件。

这样看来,如果 ai​>ai+1​ 时执行操作,不会更优,所以我们可以只在 ai​≤ai+1​ 时执行操作。

将序列从前往后扫一遍,操作完之后,如果不满足不递减,那么这个序列就没救了。因为第一次每一步都局部解决了 ai​>ai+1​ 的问题,经过一次完整扫描后,序列中所有的递减关系都已被消除,若存在这样的操作方案,就已经得到非递减序列。

代码:

int n; cin>>n;

for (int i = 0; i < n; i++) cin>>ai;

for (int i = 1; i < n; i ++)

{

int x = min(ai-1, ai);

ai-1 -= x;

ai -= x;

}

bool flag = true;

for (int i = 1; i < n; i++)

if (ai < ai-1)

{

flag = false;

break;

}

if (flag) cout<<"YES"<<endl;

else cout<<"NO"<<endl;

链接:Problem - D - Codeforces

B. pspspsps

思路:

容易发现由于 p 会占有前方的 1∼i,若有 s 在前面而又不在最前面,会得到这样的图:

其中红色区域是一个公用的排列,长度为 len,但两边都需要一个 len+1 的数字,不可行。s 在最前面就不受影响,因为左边没有不重叠部分。

代码:

int n; cin>>n;

string str; cin>>str;

if (str0 == 's') str0 = '.';

if (str.back() == 'p') str.back() = '.';

bool _s = false;

bool _p = false;

for (char t : str)

{

if (t == 's') _s = true;

if (t == 'p') _p = true;

}

cout<<((_s&&_p)?"NO":"YES")<<endl;

链接:Problem - B - Codeforces

C. Limited Repainting

思路:求最大值的最小值,常见的二分答案题。

进行 check 时,我们使用 lst 记录上一个 ai​>x 的 si​,初始值为 R。对 a 进行遍历,如果 ai​≤x,可以直接忽略,当 ai​>x 时,如果 si​ 为 B 且 lst=si​,则需要进行一次涂色,使用 cnt 记录。之后将 lst 值更新为 si​。最后 cnt 的值即为答案为 x 时所需的最少涂色次数。

使用 ans 记录答案,二分结束后,输出 ans。

代码:

string s;

int n,k;

vector<int> v;

bool check(int x)

{

int cnt = 0;

for (int i = 0; i < n; i ++ )

{

if (si == 'B' && vi > x)

{

int j = i + 1;

while (j < n && (sj == 'B' || vj <= x)) j ++ ;

cnt ++;

i = j - 1;

}

}

return cnt <= k;

}

void solve()

{

cin>>n>>k>>s;

int l = 0,r = 1e9+10;

v.resize(n);

for (int i = 0; i < n; i ++ ) cin>>vi;

if (check(l))

{

cout<<l<<endl;

return ;

}

while (l < r)

{

int mid = l + r >> 1;

if (check(mid)) r = mid;

else l = mid + 1;

}

cout<<l<<endl;

}

链接:Problem - C - Codeforces

相关推荐
梓䈑2 分钟前
【用 Vibe Coding 实现的 C++17 在线判题系统】前端开发 + Web 自动化测试
前端·c++·ai编程
冻柠檬飞冰走茶11 分钟前
PTA基础编程题目集 7-8超速判断(C++语言实现)
开发语言·数据结构·c++·算法
玖玥拾43 分钟前
LeetCode 88 合并两个有序数组
算法·leetcode
TunerT_TQ1 小时前
Valhalla 静态工程审阅 #018|MMCV 源码证据驱动评测【大厂开源基础设施特辑】
c++·开源·mfc·#计算机视觉·#商汤科技·#openmmlab·#静态源码审计
数据皮皮侠AI1 小时前
上市公司数字供应链金融指数(2010-2024)
大数据·人工智能·算法
别动我齐刘海2 小时前
Day6 unitree_G1人形机器人GMR—— MotionInput
c语言·c++·人工智能·学习·机器学习·机器人·github
Hi李耶2 小时前
【LeetCode】541.反转字符串 II
算法·leetcode·职场和发展
shylyly_2 小时前
104.二叉树的最大深度
数据结构·算法·104.二叉树的最大深度
AI科技星2 小时前
曲率‑挠率与 $\boldsymbol{\omega/c}$ 的关系、精算验证及其物理意义
c语言·开发语言·线性代数·算法·决策树·机器学习·ai科技星
Henry Zhu1232 小时前
C++17 `weak_from_this` 详解:让对象安全地观察自己
c++