A. Two Rabbits (手速题)

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. int main(){
  5. int t;
  6. cin>>t;
  7. while(t--){
  8. ll x,y,a,b;
  9. cin>>x>>y>>a>>b;
  10. ll sum = a+b;
  11. if((y-x)%sum == ){
  12. cout<<(y-x)/sum<<endl;
  13. }
  14. else{
  15. cout<<-<<endl;
  16. }
  17. }
  18. return ;
  19. }

B. Longest Palindrome (模拟 枚举)

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. int main(){
  5. int n,m;
  6. cin>>n>>m;
  7. vector<string> v;
  8. bool vis[n];
  9. memset(vis,,sizeof(vis));
  10. for(int i = ;i<n;i++){
  11. string s;
  12. cin>>s;
  13. v.push_back(s);
  14. }
  15. bool flag = false;
  16. string mid = "",ans = "";
  17. for(int i = ;i<n;i++){
  18. string t = v[i];
  19. reverse(t.begin(),t.end());
  20. if(!flag && t == v[i]) {
  21. flag = true;
  22. mid = v[i];
  23. continue;
  24. }
  25. if(flag && t == v[i]) continue;
  26. for(int j = ;j<n;j++){
  27. if(v[j] == t && vis[j] == ){
  28. ans+=v[i];
  29. vis[i] = vis[j] = ;
  30. break;
  31. }
  32. }
  33. }
  34. string t = ans;
  35. reverse(t.begin(),t.end());
  36. ans+=mid,ans+=t;
  37. if(ans.length() == ){
  38. cout<<;return ;
  39. }
  40. cout<<ans.length()<<endl;
  41. cout<<ans;
  42. return ;
  43. }

C. Air Conditioner (模拟 区间覆盖)

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. const int maxn = ;
  5. struct node{
  6. ll t,l,h;
  7. ll l1,r;
  8. bool operator < (node &x)const {
  9. return t<x.t;
  10. }
  11. }c[maxn];
  12. int main(){
  13. int q;
  14. cin>>q;
  15. while(q--){
  16. ll n,m;
  17. cin>>n>>m;
  18. for(int i = ;i<=n;i++){
  19. cin>>c[i].t>>c[i].l>>c[i].h ;
  20. }
  21. sort(c+,c++n);
  22. c[].r = c[].l1 = m;
  23. bool flag = true;
  24. for(int i = ;i<=n;i++){
  25. ll d = c[i].t - c[i-].t;
  26. ll R = c[i-].r + d;
  27. ll L = c[i-].l1 - d;
  28. if(L>c[i].h || R< c[i].l){
  29. flag = false;
  30. // cout<<"De"<<i<<endl;
  31. break;
  32. }
  33. c[i].r = min(R,c[i].h);
  34. c[i].l1 = max(L,c[i].l);
  35. }
  36. if(flag) cout<<"YES"<<endl;
  37. else cout<<"NO"<<endl;
  38. }
  39. return ;
  40. }

D. Shortest and Longest LIS(贪心 构造)

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. void solve(){
  4. int n;
  5. string s;
  6. cin>>n;
  7. cin>>s;
  8. int Min[n];
  9. int t = n;
  10. for(int i = ;i<s.length();i++){
  11. int len = ,indx = i;
  12. if(s[i] == '<'){
  13. while(s[i]=='<'){
  14. len++;
  15. i++;
  16. }
  17. }
  18. for(int j = i;j>=i-len;j--){
  19. Min[j] = t,t--;
  20. }
  21. }
  22. if(t) Min[n-] = t;
  23. t = ;
  24. int Max[n];
  25. for(int i = ;i<s.length();i++){
  26. int len = ,indx = i;
  27. if(s[i] == '>'){
  28. while(s[i]=='>'){
  29. len++;
  30. i++;
  31. }
  32. }
  33. for(int j = i;j>=i-len;j--){
  34. Max[j] = t,t++;
  35. }
  36. }
  37. if(t == n) Max[n-] = t;
  38. for(int i = ;i<n;i++) cout<<Min[i]<<" ";
  39. cout<<endl;
  40. for(int i = ;i<n;i++) cout<<Max[i]<<" ";
  41. cout<<endl;
  42. }
  43. int main(){
  44. int t;
  45. cin>>t;
  46. while(t--){
  47. solve();
  48. }
  49. return ;
  50. }

E. 1-Trees and Queries (最近公共祖先)

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. const int maxbit = ;
  5. const int maxn = 1e5+;
  6. vector<int> G[maxn];
  7. int depth[maxn];
  8. int fa[maxn][maxbit];
  9. int Log[maxn];
  10. int N;
  11. void pre(){
  12. Log[] = -;
  13. Log[] = ,Log[] = ;
  14. for(int i = ;i<maxn;i++) Log[i] = Log[i/] + ;
  15. }
  16. void dfs(int cur,int father){//dfs预处理
  17. depth[cur] = depth[father] + ;//当前结点的深度为父亲结点+1
  18. fa[cur][] = father;//更新当前结点的父亲结点
  19. for(int j = ;(<<j)<=N;j++){//倍增更新当前结点的祖先
  20. fa[cur][j] = fa[fa[cur][j-]][j-];
  21. }
  22. for(int i = ;i<G[cur].size() ;i++){
  23. if(G[cur][i] != father) {//dfs遍历
  24. dfs(G[cur][i],cur);
  25. }
  26. }
  27. }
  28. int LCA(int u,int v){
  29. if(depth[u]<depth[v]) swap(u,v);
  30. int dist = depth[u] - depth[v];//深度差
  31. while(depth[u]!=depth[v]){//把较深的结点u倍增到与v高度相等
  32. u = fa[u][Log[depth[u]-depth[v]]];
  33. }
  34. if(u == v) return u;//如果u倍增到v,说明v是u的LCA
  35. for(int i = Log[depth[u]];i>=;i--){//否则两者同时向上倍增
  36. if(fa[u][i]!=fa[v][i]){//如果向上倍增的祖先不同,说明是可以继续倍增
  37. u = fa[u][i];//替换两个结点
  38. v = fa[v][i];
  39. }
  40. }
  41. return fa[u][];//最终结果为u v向上一层就是LCA
  42. }
  43. int main()
  44. {
  45. pre();
  46. cin>>N;
  47. for(int i = ;i<N;i++){
  48. int u,v;
  49. cin>>u>>v;
  50. G[u].push_back(v),G[v].push_back(u);
  51. }
  52. dfs(,);
  53. int q;cin>>q;
  54. while(q--){
  55. int x,y,a,b,k;
  56. cin>>x>>y>>a>>b>>k;
  57. int t1 = LCA(a,b),t2 = LCA(a,x),t3 = LCA(a,y),t4 = LCA(b,x),t5 = LCA(b,y);
  58. int dis = abs(depth[t1]-depth[a])+abs(depth[t1]-depth[b]);
  59. if(dis% == k% && dis <=k ){
  60. // cout<<"De1"<<endl;
  61. cout<<"YES"<<endl;
  62. continue;
  63. }
  64. int dis1 = abs(depth[t2]-depth[a])+abs(depth[t2]-depth[x]);
  65. int dis2 = abs(depth[t5]-depth[b])+abs(depth[t5]-depth[y]);
  66. if( (dis1+dis2+)% == k% && dis1+dis2+ <= k){
  67. // cout<<"de2"<<endl;
  68. cout<<"YES"<<endl;
  69. continue;
  70. }
  71. dis1 = abs(depth[t3]-depth[a])+abs(depth[t3]-depth[y]);
  72. dis2 = abs(depth[t4]-depth[b])+abs(depth[t4]-depth[x]);
  73. if((dis1+dis2+)% == k% && dis1+dis2+ <= k){
  74. // cout<<"de3"<<endl;
  75. cout<<"YES"<<endl;
  76. continue;
  77. }
  78. cout<<"NO"<<endl;
  79. }
  80. return ;
  81. }

F2. Animal Observation (hard version) (dp 滑动窗口 线段树区间更新最大值查询)

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int maxn = 4e4+;
  4. int dp[][maxn];
  5. int val[][maxn];
  6. int sum[][maxn];
  7. int n,m,k;
  8. struct node{
  9. int l,r;
  10. int Max,lz;
  11. }seg_t[maxn*];
  12. void build(int l,int r,int p){
  13. seg_t[p].l = l,seg_t[p].r = r;
  14. if(l == r) {
  15. seg_t[p].Max = ;return ;
  16. }
  17. int mid = (l+r)>>;
  18. build(l,mid,p*);
  19. build(mid+,r,p*+);
  20. seg_t[p].Max = max(seg_t[p*].Max ,seg_t[p*+].Max );
  21. }
  22. void pushdown(int k){
  23. seg_t[k*].lz +=seg_t[k].lz ;
  24. seg_t[k*+].lz +=seg_t[k].lz ;
  25. seg_t[k*].Max +=seg_t[k].lz ;
  26. seg_t[k*+].Max +=seg_t[k].lz ;
  27. seg_t[k].lz = ;
  28. }
  29. void upd(int L,int R,int p,int v){
  30. if(seg_t[p].l == L && seg_t[p].r == R){
  31. seg_t[p].lz +=v;
  32. seg_t[p].Max +=v;
  33. return;
  34. }
  35. if(seg_t[p].lz ) pushdown(p);
  36. int mid = (seg_t[p].l + seg_t[p].r )>>;
  37. if(R<=mid) upd(L,R,p*,v);
  38. else if(L>mid) upd(L,R,p*+,v);
  39. else{
  40. upd(L,mid,p*,v);
  41. upd(mid+,R,p*+,v);
  42. }
  43. seg_t[p].Max = max(seg_t[p*].Max ,seg_t[p*+].Max );
  44. }
  45. int query(int p,int L,int R){
  46. if(seg_t[p].l == L && seg_t[p].r == R) return seg_t[p].Max ;
  47. if(seg_t[p].lz ) pushdown(p);
  48. int mid = (seg_t[p].l +seg_t[p].r)>>;
  49. if(R<=mid) return query(p*,L,R);
  50. else if(L>mid) return query(p*+,L,R);
  51. else return max(query(p*,L,mid),query(p*+,mid+,R));
  52. }
  53. int main(){
  54. cin>>n>>m>>k;
  55. for(int i = ;i<=n;i++){
  56. for(int j = ;j<=m;j++) {
  57. cin>>val[i][j];
  58. sum[i][j] = sum[i][j-] + val[i][j];
  59. }
  60. }
  61. for(int i = ;i<=m-k+;i++){
  62. dp[][i] = sum[][i+k-] - sum[][i-]+sum[][i+k-]-sum[][i-];
  63. }
  64. for(int i = ;i<=n;i++){
  65. memset(seg_t,,sizeof(seg_t));
  66. build(,*m,);
  67. for(int j = ;j<=m;j++) upd(j,j,,dp[i-][j]);
  68. for(int j = ;j<=k;j++) upd(,j,,-val[i][j]);
  69. for(int j = ;j<=m-k+;j++){
  70. dp[i][j] = max(dp[i][j],query(,,m)+sum[i][j+k-]-sum[i][j-]+sum[i+][j+k-]-sum[i+][j-]);
  71. upd(max(,j-k+),j,,val[i][j]);
  72. upd(j+,j+k,,-val[i][j+k]);
  73. }
  74. }
  75. int ans = ;
  76. for(int i = ;i<=m;i++) ans = max(ans,dp[n][i]);
  77. cout<<ans;
  78. return ;
  79. }

Codeforces Round #620 (Div. 2) A-F代码 (暂无记录题解)的更多相关文章

  1. Codeforces Round #620 (Div. 2)

    Codeforces Round #620 (Div. 2) A. Two Rabbits 题意 两只兔子相向而跳,一只一次跳距离a,另一只一次跳距离b,每次同时跳,问是否可能到同一位置 题解 每次跳 ...

  2. Codeforces Round #573 (Div. 1) 差F

    Codeforces Round #573 (Div. 1) E 题意:二维平面上有 n 个点,你可以放至多 m 条直线使得 (0,0) 与每个点的连线至少与一条直线相交.求原点与所有直线的距离最小值 ...

  3. Codeforces Round #541 (Div. 2) (A~F)

    目录 Codeforces 1131 A.Sea Battle B.Draw! C.Birthday D.Gourmet choice(拓扑排序) E.String Multiplication(思路 ...

  4. Codeforces Round #532 (Div. 2):F. Ivan and Burgers(贪心+异或基)

    F. Ivan and Burgers 题目链接:https://codeforces.com/contest/1100/problem/F 题意: 给出n个数,然后有多个询问,每次回答询问所给出的区 ...

  5. Codeforces Round #346 (Div. 2) E F

    因为很久没有个人认真做题了 昨天晚上开了场虚拟cf来锻炼个人手速 选的是第一次做cf的场 那时候7出3还被hack...之后也没补题 这次做的时候顺便回忆了一下以前比赛的时候是怎么想的 发现经验还是很 ...

  6. Codeforces Round #600 (Div. 2)E F

    题:https://codeforces.com/contest/1253/problem/E 题意:给定n个信号源,俩个参数x和s,x代表这个信号源的位置,s代表这个信号源的波及长度,即这个信号源可 ...

  7. Codeforces Round #322 (Div. 2) E F

    E. Kojiro and Furrari 题意说的是 在一条直线上 有n个加油站, 每加一单位体积的汽油 可以走1km 然后每个加油站只有一种类型的汽油,汽油的种类有3种 求从起点出发到达终点要求使 ...

  8. Codeforces Round #506 (Div. 3) 1029 F. Multicolored Markers

    CF-1029F 题意: a,b个小正方形构造一个矩形,大小为(a+b),并且要求其中要么a个小正方形是矩形,要么b个小正方形是矩形. 思路: 之前在想要分a,b是否为奇数讨论,后来发现根本不需要.只 ...

  9. Codeforces Round #620 (Div. 2) D

    构造一个排列,要求相邻之间的数满足给定的大小关系,然后构造出两个序列,一个序列是所有可能的序列中LIS最长的,一个所有可能的序列中LIS最短的 最短的构造方法:我们考虑所有单调递增的部分,可以发现要让 ...

随机推荐

  1. qt creator源码全方面分析(2-3)

    目录 External Tool Specification Files 文件名 位置 文件格式 主要标签 描述标签 可执行规范标签 示例 External Tool Specification Fi ...

  2. 杭电-------2052Picture(C语言)

    #include<stdio.h> int main() { int width, height; int i, j; while (~scanf("%d %d", & ...

  3. 12.python内置模块之sys模块介绍

    python的sys模块是与python解释器交互的一个接口,提供对解释器使用或维护的一些变量的访问,即与解释器强烈交互的函数. sys模块的常用函数: 1.sys.argv:命令行参数列表.第一个元 ...

  4. 「Flink」使用Java lambda表达式实现Flink WordCount

    本篇我们将使用Java语言来实现Flink的单词统计. 代码开发 环境准备 导入Flink 1.9 pom依赖 <dependencies> <dependency> < ...

  5. centos7下查看mysql配置文件适用顺序

    mysql --help|grep 'my.cnf' [root@izm5e2q95pbpe1hh0kkwoiz ~]# mysql --help|grep 'my.cnf' order of pre ...

  6. Spring Boot从入门到精通(一)搭建第一个Spring Boot程序

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过 ...

  7. JAVA系统架构高并发解决方案 分布式缓存 分布式事务解决方案

    JAVA系统架构高并发解决方案 分布式缓存 分布式事务解决方案

  8. #《Essential C++》读书笔记# 第七章 异常处理

    基础知识 异常处理机制有两个主要成分:异常的鉴定和发出,以及异常的处理方式.通常,不论是membe function和non-member function,都有可能产生异常以及处理异常.异常出现后, ...

  9. Electron+Vue – 基础学习(1): 创建项目

    Electron 和 Vue 都是干啥的,就不做过多介绍了,可以去官网瞅瞅.下面总结 Electron+Vue 创建项目,Electron + Vue 创建项目实际上相当于:创建Vue项目 + Ele ...

  10. vs2015 编译boost库

    1.下载boost官网安装包. https://dl.bintray.com/boostorg/release/1.66.0/binaries/ 注意:这里一定要选择好boost版本 如:  boos ...