博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces Round #389 (Div. 2,) B C
阅读量:6285 次
发布时间:2019-06-22

本文共 1512 字,大约阅读时间需要 5 分钟。

考完复变之后沉迷联盟不能自拔...明天就开始抢救计组 ... 

B 一个人装错了键帽 选择几个pair 把pair里面的键帽交换 并且每个键帽最多可以换一次 给出按键序列和输出序列 判断是否可以 如果可以输出pair

因为每个键帽最多可以换一次 所以如果错了 一定是一一对应的

于是设定一个表存每个键帽对应的实际字母

需要注意的是 ac cc 这种情况下是 -1 很多人wa在了test14

C 在一个格子图里给出一个路径 里面有UDLR四种移动方向 问 我在格子路径里面最少选几个点 可以让我沿着格子路径走 其实是在相邻的点与点之间走最短路

可以想到 如果一个图中同时出现了LR UD 肯定不是最短路 

所以将移动方向视为1-n 初始自己在0处 每次二分查找出自己位置到最后的四种移动方式的最左的位置

可见 此时可移动到 min(max(L,R)-1,max(U,D)-1)

连续二分 直到走到n处

#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define L long longchar s[200050];int n ;int su[200050];int sd[200050];int sr[200050];int sl[200050];int ef(int a[],int ll,int rr,int val){ int res = n + 1; int l = ll ; int r = rr ; while(l <= r){ int mid = (l + r) / 2; if(a[mid]>val){ res = mid ; r = mid - 1; } else { l = mid + 1; } } return res ;}int main(){ scanf("%d",&n); scanf("%s",s+1); su[0] = sl[0] = sr[0] = sd[0] = 0; for(int i=1;i<=n;i++){ su[i] = su[i-1]; sr[i] = sr[i-1]; sd[i] = sd[i-1]; sl[i] = sl[i-1]; if(s[i] =='U')su[i]++; if(s[i] =='D')sd[i]++; if(s[i] =='R')sr[i]++; if(s[i] =='L')sl[i]++; } int w = 0; int ans = 0; while(w < n){ char c = s[w+1]; int uu = ef(su,w+1,n,su[w]); int dd = ef(sd,w+1,n,sd[w]); int rr = ef(sr,w+1,n,sr[w]); int ll = ef(sl,w+1,n,sl[w]); int ky1 = max(uu,dd)-1; int ky2 = max(rr,ll)-1; int res = min(ky1,ky2); ans ++ ; w = res ; } printf("%d\n",ans);}

  

转载于:https://www.cnblogs.com/rayrayrainrain/p/6227551.html

你可能感兴趣的文章
(转)第三方支付参与者
查看>>
程序员修炼之道读后感2
查看>>
DWR实现服务器向客户端推送消息
查看>>
js中forEach的用法
查看>>
Docker之功能汇总
查看>>
!!a标签和button按钮只允许点击一次,防止重复提交
查看>>
(轉貼) Eclipse + CDT + MinGW 安裝方法 (C/C++) (gcc) (g++) (OS) (Windows)
查看>>
还原数据库
查看>>
作业调度框架 Quartz.NET 2.0 beta 发布
查看>>
mysql性能的检查和调优方法
查看>>
项目管理中的导向性
查看>>
Android WebView 学习
查看>>
(转)从给定的文本中,查找其中最长的重复子字符串的问题
查看>>
HDU 2159
查看>>
spring batch中用到的表
查看>>
资源文件夹res/raw和assets的使用
查看>>
UINode扩展
查看>>
LINUX常用命令
查看>>
百度云盘demo
查看>>
概率论与数理统计习题
查看>>