题目链接:Dashboard - Educational Codeforces Round 172 (Rated for Div. 2) - Codeforces

C. Competitive Fishing

tag:后缀和 + 思维

Description:有一个序列含\(n\)个数(每个数是\(0\)或\(-1\)),将其分为\(m\)个区间,从前往后每个区间中第\(i\)个区间的权值为\((i - 1)\),求序列权值和大于等于\(k\)的最小区间划分数,如果不能输出\(-1\)。

Solution:在第\(i\)个数前面划分一次的贡献为其后缀和,因此我们贪心的取后缀和即可,注意第一个数前面不能划分。

%%
1
4 4
0011 3
%%
void solve(){
int n, k;
string ss;
cin >> n >> k >> ss;
ss = '&' + ss;
vector<int> a(n + 1), s(n + 2);
for (int i = 1; i <= n; i ++){
if (ss[i] == '1')
a[i] = 1;
else
a[i] = -1;
} priority_queue<int> qu;
for (int i = n; i > 1; i --){ // 后缀和
s[i] = s[i + 1] + a[i];
qu.push(s[i]); }
int ans = 0, sum = 0;
while (qu.size()){
sum += qu.top();
qu.pop();
ans ++; if (sum >= k){
cout << ans + 1 << endl;
return;
}
} cout << -1 << endl;
}

D. Recommendations

tag:思维

Description:给定n个区间[l,r],输入所有包含该区间的公共区间减去该区间的长度。1 <= n <= 2e15, 1 <= l <= r <= 1e9

Solution:区间问题考虑先排序再处理。用两个数组R[i],L[i],存储第i个区间对应的右边界和左边界。考虑如何求右边界。

  • 显然需要按左端点从小到大排序,因为需要左边包含当前区间,同时右端点从大到小排序,让能包含的区间先出现。
  • 左边界同理。
  • 如果有两个区间相同特判为0。(用map记录)

trick:区间问题考虑先排序再处理用set自带的st.lower_bound()比lower_bound函数快,但是前者返回的是迭代器。

struct node{
int l, r, id;
}; bool cmp1(node a, node b){ // 左端点从小到大排序,右端点大在前,计算Ri
if (a.l == b.l)
return a.r > b.r;
else
return a.l < b.l;
} bool cmp2(node a, node b){
if (a.r == b.r)
return a.l < b.l;
else
return a.r > b.r;
} void solve(){
int n;
cin >> n;
vector<node> a(n);
vector<node> id(n);
map<pii, int> mp; for (int i = 0; i < n; i ++){
cin >> a[i].l >> a[i].r;
a[i].id = i;
id[i] = a[i];
mp[{a[i].l, a[i].r}] ++;
} vector<int> L(n), R(n);
sort(a.begin(), a.end(), cmp1);
set<int> st;
for (int i = 0; i < n; i ++){
if (st.size() == 0){
R[a[i].id] = a[i].r;
}
else{
if (st.lower_bound(a[i].r) == st.end()){
R[a[i].id] = a[i].r;
}
else{
int xr = *(st.lower_bound(a[i].r));
R[a[i].id] = xr;
} }
st.insert(a[i].r);
} st.clear();
sort(a.begin(), a.end(), cmp2);
for (int i = 0; i < n; i ++){
if (st.size() == 0){
L[a[i].id] = a[i].l;
}
else{
if (st.lower_bound(-a[i].l) == st.end()){
L[a[i].id] = a[i].l;
}
else{
int xr = *(st.lower_bound(-a[i].l));
L[a[i].id] = -xr;
} }
st.insert(-a[i].l);
} for (int i = 0; i < n; i ++){
if (mp[{id[i].l, id[i].r}] > 1){
cout << 0 << endl;
}
else
cout << (R[i] - id[i].r) + (id[i].l - L[i]) << endl;
}
}

Educational Codeforces Round 172 (Rated for Div. 2)(C-D)的更多相关文章

  1. Educational Codeforces Round 59 (Rated for Div. 2) (前四题)

    A. Digits Sequence Dividing(英文速读) 练习英语速读的题,我还上来昏迷一次....只要长度大于2那么一定可以等于2那么前面大于后面就行其他no 大于2的时候分成前面1个剩下 ...

  2. Educational Codeforces Round 53 (Rated for Div. 2) (前五题题解)

    这场比赛没有打,后来补了一下,第五题数位dp好不容易才搞出来(我太菜啊). 比赛传送门:http://codeforces.com/contest/1073 A. Diverse Substring ...

  3. Educational Codeforces Round 54 [Rated for Div. 2] (CF1076)

    第一次在宿舍打CF 把同宿舍的妹子吵得不行... 特此抱歉QAQ A 题意:给定一个字符串, 最多删掉一个字符,使得剩余字符串字典序最小 n<=2e5 当然"最多"是假的 删 ...

  4. Educational Codeforces Round 58 (Rated for Div. 2) (前两题题解)

    感慨 这次比较昏迷最近算法有点飘,都在玩pygame...做出第一题让人hack了,第二题还昏迷想错了 A Minimum Integer(数学) 水题,上来就能做出来但是让人hack成了tle,所以 ...

  5. D Merge Equals Educational Codeforces Round 42 (Rated for Div. 2) (STL )

    D. Merge Equals time limit per test2 seconds memory limit per test256 megabytes inputstandard input ...

  6. Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship

    Problem   Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship Time Limit: 2000 mSec P ...

  7. Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems(动态规划+矩阵快速幂)

    Problem   Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems Time Limit: 3000 mSec P ...

  8. Educational Codeforces Round 43 (Rated for Div. 2)

    Educational Codeforces Round 43 (Rated for Div. 2) https://codeforces.com/contest/976 A #include< ...

  9. Educational Codeforces Round 35 (Rated for Div. 2)

    Educational Codeforces Round 35 (Rated for Div. 2) https://codeforces.com/contest/911 A 模拟 #include& ...

  10. Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings

    Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings 题目连接: http://cod ...

随机推荐

  1. 不错的PHP扩展

    不错的PHP扩展 ext name ext description ds data structure 提供list hash queue等数据结构 igbinary 数据压缩(速度快 压缩后内容小) ...

  2. PHP无法连接MySQL8.0数据库问题处理 报错如下: SQLSTATE[HY000]

    PHP无法连接MySQL8.0数据库问题处理报错如下:SQLSTATE[HY000] [2054] The server requested authentication method unknown ...

  3. apisix lua插件开发

    1. 怎么定义ngx自定义变量 ngx.var.custom_var nginx_config: # config for render the template to generate nginx. ...

  4. 解读Graph+AI白皮书:LLM浪潮下,Graph尚有何为?

    历时半年,由蚂蚁集团和之江实验室牵头,联合北京邮电大学.浙江大学.西湖大学.东北大学.杭州悦数科技.浙江创邻科技.北京大学.北京交通大学.复旦大学.北京海致星图科技.腾讯.信雅达科技.北京枫清科技等单 ...

  5. java——棋牌类游戏五子棋(webwzq1.0)之一(基础)

    这是本人最近一段时间写的斗地主的java代码,大体框架都实现了,一些细节还需要后续优化. package basegame; import java.awt.Button; import java.a ...

  6. 定时任务管理之qinglong

    定时任务,是在日常开发需求中总会遇到的,我们往往会有一些简单的脚本工作,希望能够每小时或每天执行一次.当这类需求变得多起来后,这些零散的任务脚本就会变得难以管理,尤其是它们可能由不同的脚本语言编写而成 ...

  7. manim边做边学--图形的创建与销毁

    上一篇介绍了文字相关的创建和销毁动画,本篇介绍几个用于几何图形的创建和销毁动画效果类. Create:用于在场景中生成一个完整的Mobject(可渲染对象) Uncreate:是Create的逆操作, ...

  8. datagridview点击列头对当前列进行排序的功能无效

    DataGridView 的默认行为是支持通过单击列头对列进行排序,但在以下情况下可能会取消该功能或无法使用: 1. 绑定的数据源不支持排序 如果 DataGridView 的数据源是绑定到一个不支持 ...

  9. 2.猿人学爬虫攻防第二题 JS 混淆 动态cookie

    题目链接:请点击 抓取到发布日热度的值,计算所有值的加和 1.分析网页 由于是动态Cookie,为了避免其他Cookie的影响,所以使用浏览器的无痕模式进行调试,按f12并选中[Preserve lo ...

  10. HttpClientFactory in ASP.NET Core 2.1 Part 5: 日志

    HttpClientFactory in ASP.NET Core 2.1 Part 5: 日志 原文地址:https://www.stevejgordon.co.uk/httpclientfacto ...