A - Mark the Photographer

Description:

​ 给定2n个数和k,请问是否存在n对(i, j) abs(ai - aj) >= k

Solution:

​ 先排序 然后对1和n + 1, 2和n + 2连续比对。

​ 赛时拖了节奏 因为看成了 == k 下次注意读题

Code:

void solve()
{int n, x;cin >> n >> x;vector<int> a(2 * n);rep(i, 0, 2 * n)cin >> a[i];sort(a.begin(), a.end());bool ok = true;for(int i = 0; i < n; i ++)if(a[i] + x > a[i + n])ok = false;if(ok)cout << "YES\n";elsecout << "NO\n";
}

B - Mark the Dust Sweeper(思维)

Description:

​ 每次操作可以选择(i,j)使ai - 1,aj + 1,前提条件是(ai … a_j-1)必须都大于0

​ 使a1到a_n-1全部为0,求最小的操作次数

Solution:

​ 先把中间所有的0都填上,填充的过程是o1的,也就是操作次数等于0的个数,然后从左到右,将1逐个放到最后一位上,也就是a1到a_n-1的和

Code:

const int N = 200005;
int n;
LL a[N];void solve()
{cin >> n;for(int i = 1; i <= n; i ++)cin >> a[i];LL res = 0, sum = 0;for(int i = 1; i <= n - 1; i ++){if(a[i] == 0 && sum > 0) //从第一个非0开始计算有多少个0res ++;sum += a[i];}cout << sum + res << '\n';
}

C - Mark and His Unfinished Essay(字符串复制+映射)

Description:

​ 给定一个字符串s,进行c次操作,每次选择当前字符串的一段(给出左右端点)加到后面,最后询问q次,第idx位的字符是什么。

Solution:

​ 显然暴力求解不可取 复杂度过高

​ 我们需要模拟切割字符串并接在后面的过程,通过映射来找回在原串中的位置

​ 在模拟的过程中,需要记录当前接在后面的复制串的左右端点,和上一次被复制子串的左端点。

​ 右端点是为了得到下一个复制串接在后面的左端点。

​ 映射关系为 接在后面的复制串的第k位等于在原串的l + k位

​ 通过映射关系,可以倒过来重复递推回到最初始的串,查询p次,每次O©递推

Code:

int n, c, q;void solve()
{string s;cin >> n >> c >> q;cin >> s;vector<LL> vl(c + 1), vr(c + 1), last(c + 1); vl[0] = 0; //s.begin()vr[0] = n; //s.end()for(int i = 1; i <= c; i ++){LL l, r;cin >> l >> r;l --, r --;vl[i] = vr[i - 1]; //当前复制得到的字符串的左端点vr[i] = vl[i] + (r - l + 1); //当前复制得到的字符串的右端点的下一位last[i] = vl[i] - l; //和上一个字符串的映射关系:长度}while(q --){LL x;cin >> x;x --;for(int i = c; i >= 1; i --){if(x < vl[i])    continue; //如果不在当前扩展串内,一直continueelse x -= last[i]; //减去映射关系}cout << s[x] << '\n';}
}

D - Mark and Lightbulbs(思维+构造)

Description:

​ 给出两个01串a,b,问是否能通过操作使a变成b,若可以,输出最小操作次数

​ 可以选择i (2 <= i <= n - 1) 且 s_i-1 != s_i+1 然后使si位反转(1->0, 0->1)

Solution:

​ 根据定义,我们可以知道头尾不相同的必然不成立

​ 观察可得,111 000 111 000 --> 1 00000 1 000 或 11111 0 11111 0

​ 不难发现,连续相同段最多被削减成一个,但不能完全删去,所以两个串的01段是不变的

​ 得出结论,当两个字符串的01段相同且头尾相同的情况下,存在答案

​ 现在考虑如何将连续但长度更小的一段扩展成目标段,如图所示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tpzmYxcb-1658028661410)(C:\Users\86137\Pictures\Typora_picture\v2-53d36afc9717cffe12e12fe710f81719_r.jpg)]

对于该区间需要的操作次数就是 max(0, 上区间的左端点-下区间的左端点) + max(0, 下取件右端点-上区间右端点),这是对于扩展考虑的情况;同时我们不需要考虑缩短的情况,因为一段的缩短就是他旁边两段的扩展。遍历每一段累加答案。

Code:

int n;
string a, b;int segcount(string s) //去掉连续的0和连续的1 得到01段
{return unique(s.begin(), s.end()) - s.begin();
}vector<vector<int> > get_seg(string s)
{vector<vector<int> > v; //将01区间分开存储vector<int> res;int m = s.size();res.pb(0);for(int i = 1; i < m; i ++){if(s[i] != s[i - 1]){v.pb(res);res.clear();}res.pb(i);}v.pb(res); //不加就wa 别忘了return v;
}void solve()
{ios;cin >> n >> a >> b;if((segcount(a) != segcount(b)) || a[0] != b[0] || a[n - 1] != b[n - 1]){cout << "-1\n";return;}vector<vector<int> > va = get_seg(a), vb = get_seg(b);LL res = 0;for(int i = 0; i < va.size(); i ++)res += max(0, va[i].front() - vb[i].front()) + max(0, vb[i].back() - va[i].back());    cout << res << '\n';
}

# CF #807 Div.2(A - D)相关推荐

  1. CF #366(div.2) C 模拟,思维

    CF #366(div.2)  C.  Thor 题意:一个手机n个联系人,有q个操作.每次给出ty和ai,如ty==1,表示收到ai的一条信息:如ty==2,表示将ai发的信息都看掉:如ty==3, ...

  2. CF #371 (Div. 2) C、map标记

    1.CF #371 (Div. 2)   C. Sonya and Queries  map应用,也可用trie 2.总结:一开始直接用数组遍历,果断T了一发 题意:t个数,奇变1,偶变0,然后与问的 ...

  3. Codeforces Round #807 (Div. 2)(A-D)

    Dashboard - Codeforces Round #807 (Div. 2) - CodeforcesCodeforces. Programming competitions and cont ...

  4. Codeforces Round #807 (Div. 2) A-C题解

    Codeforces Round #807 (Div. 2) A.B.C题题解 A - Mark the Photographer 题意:马克要给2n个人照相,分两排,一排站n人,给出每个人的身高,要 ...

  5. Codeforces Round #807 (Div. 2) A-D

    Codeforces Round #807 (Div. 2) A. Mark the Photographer 给定整数n,数组长度2*n,问能不能拆成两个长度为n的数组,两个数组的第i项有a[i]& ...

  6. Codeforces Round #807 (Div. 2)A~E个人题解

    Dashboard - Codeforces Round #807 (Div. 2) - Codeforces A. Mark the Photographer 题意: 有个人,每个人的身高设为,现在 ...

  7. Codeforces Round #807 (Div. 2) A - D

    Codeforces Round #807 (Div. 2) 提交情况 参考 Codeforces Round #807 (Div. 2) A~E A. Mark the Photographer 标 ...

  8. cf #823 Div.2(A~C)

    Cf #823 Div.2 文章目录 Cf #823 Div.2 [A. Planets](https://codeforces.com/contest/1730/problem/A) [B. Mee ...

  9. cf #818 Div.2(A~C)

    Cf #818 Div.2 文章目录 Cf #818 Div.2 [A. Madoka and Strange Thoughts](https://codeforces.com/contest/171 ...

最新文章

  1. [nowCoder] 局部最小值位置
  2. 【分组并查集讲解】A Bug‘s Life(例题)
  3. Spring web.xml详解
  4. WPF 操作 richTextBox
  5. 适用于Photoshop的人像美容磨皮ps插件:Beauty Retouch Panel 2021 Mac
  6. opencv 测试安装完成_opencv4.3 的安装(linux)
  7. (80)FPGA复位激励(function)
  8. 关于Tomcat配置虚拟路径保存、访问图片
  9. NS3网络仿真(6): 总线型网络
  10. oozie 调度pyspark
  11. 电脑cpu测试软件 95,Prime95(CPU稳定性测试)
  12. OAuth 2.0授权框架详解
  13. 惠普打印机只打印一半_打印机打印一半字就只有半个了
  14. 去哪儿网2018春招软件开发工程师、前端开发工程师编程题 - 题解
  15. python画父子关系图_python elasticsearch-dsl父子关系
  16. 智鼎在线测评是测什么_为什么求职者会反感企业招聘用的人才测评?
  17. Linux下基础命令(二)
  18. easyexcel Create workbook failure 问题解决
  19. Rsync 下行同步 + Inotify 实时同步详解
  20. 转载:嵌入式系统综述之二

热门文章

  1. 闪电分镜 一款影视前期策划的完美解决方案
  2. vscode中vue代码格式化的相关配置
  3. 程序员面试金典——解题总结: 9.18高难度题 18.5有个内含单词的超大文本文件,给定任意两个单词,找出在这个文件中这两个单词的最短距离
  4. opencv各lib库的功能
  5. 中国互联网公司亏损能力排行榜
  6. 三菱fx1n40mr001接线图_三菱FX1N-40MR-001使用说明书 - 广州凌控
  7. 数字IC设计工程师要具备哪些技能
  8. mysql gtid 同步_结合案例说说5.7使用gtid同步后,mysql.gtid_executed引起的从库gtid断层...
  9. 致江苏卫视《最强大脑第二季》节目组的一封信
  10. 外卖跑腿app开发功能分析