CF #578 Div2
// 比赛链接:https://codeforces.com/contest/1200
A - Hotelier
题意:
有一家旅馆有10间房,编号0~9,从左到右顺序排列。旅馆有左右两扇门,每次新来旅客从进来门的方向分配最近的空闲房间。给你一段旅客到来方向以及离开位置的序列,输出最终旅馆房间使用情况。
输入:
8
LLRL1RL1
输出:
1010000011
题解:
序列长度不超过10^5,暴力模拟复杂度O(10*n)。
AC代码:
#include<iostream>
#include<cstdio>
using namespace std; char s[];
bool r[]; // true:有人 false:无人
int main()
{
int n; cin>>n;
scanf("%s", s);
for(int i=;i<n;i++) {
if(s[i]=='L') {
for(int j=;j<=;j++) {
if(!r[j]) {
r[j] = ;
break;
}
}
} else if(s[i]=='R') {
for(int j=;j>=;j--) {
if(!r[j]) {
r[j] = ;
break;
}
}
} else {
r[s[i]-''] = ;
}
}
for(int i=;i<=;i++) {
putchar(r[i]?'':'');
} return ;
}
B - Block Adventure
题意:
从起点到终点有 n 个格子,每块高度 h[i],初始时背包有m块方块,从 i 跳到 i+1 有三种选择,1. 把背包的方块放到当前的格子上;2. 把当前格子的方块放到背包里;3.跳到下一块。
只有当 | h[i] - h[i+1] | <= k 才能跳到下一块。 问是否能跳到终点。
输入:
第一行组数,后面每组第一行 n,m,k,第二行 n个值代表 h[i]。
5
3 0 1
4 3 5
3 1 2
1 4 7
4 10 0
10 20 10 20
2 5 5
0 11
1 9 9
99
输出:
YES
NO
YES
NO
YES
题解:
贪心。
如果能跳到下一块,(左边能凑到的最多方块要大于等于右边最少需要的方块,即m+h[i]>= h[i+1]-k ),把前一块上的方块取到前后差值不超过 k。否则跳不到终点。
AC代码:
#include<iostream>
#include<cstdio>
using namespace std; int h[];
int main()
{
int t; cin>>t;
while(t--) {
int n, m, k;
scanf("%d %d %d", &n, &m, &k);
for(int i=;i<n;i++) {
scanf("%d", &h[i]);
}
bool flag = true;
for(int i=;i+<n;i++) {
if(h[i]+m>=h[i+]-k) {
if(h[i+]>=k) m = h[i]+m - (h[i+]-k);
else
m = h[i]+m;
}
else {
flag = false;
break;
}
} if(flag) printf("YES\n");
else printf("NO\n");
}
return ;
}
C - Round Corridor
题意:
一个圆盘,内层分割成m块,外层分割成n块,给出 q 个询问,判断所给两块区域是否连通。
输入:
第一行 n,m,q,后面 q 行,每行四个数 sx,sy,ex,ey。sx,ex 为 1 代表内层,为 2 代表外层;sy,ey 代表编号,如图顺时针排序。
4 6 3
1 1 2 3
2 6 1 2
2 6 2 4
输出:
YES
NO
YES
题解:
思维题。设 g = gcd(m, n),由图可知 1*g,2*g,3*g,…… k*g 把圆盘分割开。这些单独块之内连通,不在同一块则不连通。
AC代码:
#include<iostream>
#include<cstdio>
using namespace std;
typedef long long ll;
ll gcd(ll a, ll b) {
return b==?a:gcd(b, a%b);
} ll g, m, n;
ll f(int d, ll v) { // 计算 v 所在块的编号
if(d==) return v/(m/g);
else return v/(n/g);
}
int main() {
int q;
cin>>m>>n>>q;
int sx, ex;
ll sy, ey;
g = gcd(m, n);
while(q--) {
scanf("%d %lld %d %lld", &sx, &sy, &ex, &ey);
if(f(sx, sy-)==f(ex, ey-)) printf("YES\n");
else printf("NO\n"); } return ;
}
E - Compress
题意:
有1e5个单词,当前一个单词的后缀与后一个单词的前缀相同时,相同部分可以压缩省略,这个过程递归进行。输出一行字符串表示最终结果。
输入:
5
I want to order pizza
输出:
Iwantorderpizza
题解:
字符串哈希。
AC代码:
注意压缩过程是递归进行的,没注意一直WA5。
单模数哈希WA78,可能没取好模数吧。双模数哈希AC。
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
typedef long long ll; const int N = 1e6 + ;
const int Base1 = ;
const int Base2 = ;
const int Mod1 = 1e9 + ;
const int Mod2 = ;
char s[N], ans[N]; int main() {
int n;
scanf("%d", &n);
int len = ; // 前一个串长度
for(int i = ; i < n; ++i) {
scanf("%s", s);
int m = strlen(s); ll now1 = , last1 = ; // 前面所有串的哈希,当前串的哈希
ll now2 = , last2 = ;
ll bs1 = , bs2 = ;
int same = ; // 公共长度
for(int k = ; k <= m && k <= len; ++k) {
now1 = (now1*Base1 + s[k-]) % Mod1; // 从前往后加
last1 = (bs1*ans[len-k] + last1) % Mod1; // 从后往前加
bs1 = bs1 * Base1 % Mod1; now2 = (now2*Base2 + s[k-]) % Mod2;
last2 = (bs2*ans[len-k] + last2) % Mod2;
bs2 = bs2 * Base2 % Mod2; if(now1==last1 && now2==last2) same = k;
}
for(int k = same; k < m; ++k) {
ans[len++] = s[k];
}
}
ans[len] = '\0';
puts(ans);
return ;
}
CF #578 Div2的更多相关文章
- cf 442 div2 F. Ann and Books(莫队算法)
cf 442 div2 F. Ann and Books(莫队算法) 题意: \(给出n和k,和a_i,sum_i表示前i个数的和,有q个查询[l,r]\) 每次查询区间\([l,r]内有多少对(i, ...
- CF#603 Div2
差不多半年没打cf,还是一样的菜:不过也没什么,当时是激情,现在已是兴趣了,开心就好. A Sweet Problem 思维,公式推一下过了 B PIN Codes 队友字符串取余过了,结果今天早上一 ...
- CF R631 div2 1330 E Drazil Likes Heap
LINK:Drazil Likes Heap 那天打CF的时候 开场A读不懂题 B码了30min才过(当时我怀疑B我写的过于繁琐了. C比B简单多了 随便yy了一个构造发现是对的.D也超级简单 dp了 ...
- CF#581 (div2)题解
CF#581 题解 A BowWow and the Timetable 如果不是4幂次方直接看位数除以二向上取整,否则再减一 #include<iostream> #include< ...
- [CF#286 Div2 D]Mr. Kitayuta's Technology(结论题)
题目:http://codeforces.com/contest/505/problem/D 题目大意:就是给你一个n个点的图,然后你要在图中加入尽量少的有向边,满足所有要求(x,y),即从x可以走到 ...
- CF 197 DIV2 Xenia and Bit Operations 线段树
线段树!!1A 代码如下: #include<iostream> #include<cstdio> #define lson i<<1 #define rson i ...
- CF#345 div2 A\B\C题
A题: 贪心水题,注意1,1这组数据,坑了不少人 #include <iostream> #include <cstring> using namespace std; int ...
- CF R303 div2 C. Woodcutters
C. Woodcutters time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- CF 192 Div2
A.Cakeminator 暴搞之,从没有草莓覆盖的行.列遍历 char map[30][30]; int vis[30][30]; int hang[30],lie[30]; int main() ...
随机推荐
- Future Parttern 先给你这张提货单
Future是未来,预期的意思,Thread-permessage模式是指将任务交给其他线程来做,但是如果想知道处理的结果,就要使用Future模式,它的典型应用时执行一个需要花一些时间的方法,会立即 ...
- Activiti学习笔记10 — 动态任务分配
动态任务分配使用的两种方式 一.通过特殊表达式,来获取任务信息 ,在流程 UserTask节点上设置 ${流程变量的Key} 1.流程定义 <?xml version="1.0&quo ...
- 现代软件工程HW2:结对编程-生成五则运算式-Core10组 [PB16110698+PB16120162]
作业具体要求点 这里 Core组要求: 1.Calc() 这个Calc 函数接受字符串的输入(字符串里就是算术表达式,例如 “5*3.5”,“7/8 - 3/8 ”,“3 + 90 * 0.3”等等) ...
- Android开发 retrofit下载与上传
前言 此博客只讲解retrofit下载与上传的使用,其实与其说是retrofit的下载与上传还不如说,依然是Okhttp的下载与上传.如果你需要了解retrofit入门请查看这篇博客(此博客不在详细讲 ...
- CSIC_716_20191108【文件的操作,以及彻底解决编码问题的方案】
关于编码的问题: 在平时编写代码,涉及到打开文件时,常常遇到字符编码的报错, 通过总结,得出以下规律 如果在操作过程中涉及到调用文本文档,一定要在文本文档开头申明编码方式(# coding:XXXX ...
- leetcode-8-字符串转换整数(atoi)
题目描述: 方法一:正则 class Solution: def myAtoi(self, str: str) -> int: return max(min(int(*re.findall('^ ...
- [JZOJ3320] 【BOI2013】文本编辑器
题目 题目大意 给你一个文本,要删去其中所有的'e'. 有三种操作: h光标左移. x删除光标上面的字母(光标是横着的). fc跳到后面的第一个字符为'c'的位置. 问操作序列的最短长度. 思考历程 ...
- 弹性网卡支持私网多IP
摘要: 弹性网卡支持多IP功能可以最多在一块弹性网卡配置20个私网IP地址,特别适用于于以下场景. 1.单个服务器上托管多个应用,提升实例利用率,每个应用对外暴露一个独立的服务IP地址. 2.当实例发 ...
- 前后端分离+本地服务实时刷新+缓存管理+接口proxy+静态资源增量更新+各种性能优化+上线运维发布——gulp工作流搭建
技巧集:http://www.gulpjs.com.cn/docs/recipes/ 其实无非就是利用各种gulp插件.node脚本对项目文件做各种IO操作,只是备忘,需要的话,还是自己重新写最合适. ...
- PAT甲级——A1109 Group Photo【25】
Formation is very important when taking a group photo. Given the rules of forming K rows with Npeopl ...