Codeforces731D 80-th Level Archeology
考虑将两个单词变成有序,我们可以得到一个或者两个旋转次数的区间。
然后考虑将两组单词变成有序,比如[l,mid]和[mid+1,r],对于mid和mid+1这两个单词我们可以求出使他们有序的旋转次数的区间。
然后将这个区间与[l,mid]的区间以及[mid+1,r]的区间求交,就可以得到使[l,r]有序的旋转次数的区间。
上面这个过程我们可以用分治来进行,区间求交可以用扫描线法。
#include <bits/stdc++.h>
using namespace std; vector<int> words[];
int cnt[];
int n, c;
int tot = ; void calc(int a, int b)
{
int idx = ;
while (idx < words[a].size() && idx < words[b].size())
{
if (words[a][idx] != words[b][idx])
break;
idx++;
}
if (idx < words[a].size() && idx < words[b].size())
{
if (words[a][idx] < words[b][idx])
{
cnt[]++;
cnt[c - words[b][idx] + ]--;
cnt[c + - words[a][idx]]++;
cnt[c]--;
tot++;
}
else
{
cnt[c + - words[a][idx]]++;
cnt[c - words[b][idx] + ]--;
tot++;
}
}
else if (idx == words[a].size() && idx != words[b].size())
{
cnt[]++;
cnt[c]--;
tot++;
}
else if (idx != words[a].size() && idx == words[b].size())
tot++;
else
{
cnt[]++;
cnt[c]--;
tot++;
}
} void divideConquer(int l, int r)
{
if (l == r)
return;
int mid = (l + r) >> ;
divideConquer(l, mid);
divideConquer(mid + , r);
calc(mid, mid + );
} int main()
{
scanf("%d%d", &n, &c);
for (int i = ; i < n; i++)
{
int l, w;
scanf("%d", &l);
while (l--)
{
scanf("%d", &w);
words[i].push_back(w);
}
}
divideConquer(, n - );
bool ok = false;
int sum = ;
for (int i = ; i < c; i++)
{
sum += cnt[i];
if (sum == tot)
{
ok = true;
printf("%d", i);
break;
}
}
if (!ok)
printf("-1");
return ;
}
Codeforces731D 80-th Level Archeology的更多相关文章
- 80-th Level Archeology
80-th Level Archeology time limit per test 2 seconds memory limit per test 256 megabytes input stand ...
- Codeforces Round #376 (Div. 2) D. 80-th Level Archeology —— 差分法 + 线段扫描法
题目链接:http://codeforces.com/contest/731/problem/D D. 80-th Level Archeology time limit per test 2 sec ...
- CodeForces 731D 80-th Level Archeology
区间并. 对于上下两个数字,如果不一样,那么可以计算出哪一段范围内可以保证字典序,并且后面所有位置都无需再考虑.对所有范围求交集就是答案了. 求交集写起来有点烦,直接对不可取的范围求并即可. #pra ...
- 【codeforces 731D】80-th Level Archeology
[题目链接]:http://codeforces.com/contest/731/problem/D [题意] 给你n个象形文; 每个象形文由l[i]个数字组成; 你可以把所有的组成象形文的数字同时增 ...
- html5-表单
例子: text,number,email 的输入框 <!-- required:必填项 --> <!-- autofocus:获得焦点 --> <!-- placeho ...
- 纯CSS3制作学生入学档案表单样式代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- nc命令总结
1.远程拷贝文件从server1拷贝文件到server2上.需要先在server2上,用nc激活监听,server2上运行: 引用 [root@hatest2 tmp]# nc -l 1234 > ...
- [Canvas]Bombman v1.04
Bombman是我仿造红白机上经典游戏爆破小人,用Canvas制作的一款网页版单机游戏, 自我感觉还是有一定的可玩性. 本游戏的胜利条件是用雷消灭所有怪物,但被怪物即使是擦边碰到或是炸弹火焰炸到就算失 ...
- [Canvas]Bombman v1.00
爆破小人Canvas版,请点此下载,并用浏览器打开试玩. 图例: 源码: <!DOCTYPE html> <html lang="utf-8"> <m ...
随机推荐
- MAC上Nuclide的安装
MAC上Nuclide的安装 本文版权归作者全部,如需转载请联系孟祥月 CSDN博客:http://blog.csdn.net/mengxiangyue 独立博客:http://mengxiangyu ...
- 《python源代码剖析》笔记 Python的编译结果
本文为senlie原创.转载请保留此地址:http://blog.csdn.net/zhengsenlie 1.python的运行过程 1)对python源码进行编译.产生字节码 2)将编译结果交给p ...
- XUtils BitmapUtils 改造以加入drawable支持
=== XUtilsBitmapUtils 改造以加入drawable支持 === # XUtils 简单介绍 XUtils 是一套少有的早期国产安卓框架, 其源于AFinal, 文件夹结构也与之相似 ...
- oracle user locke
1:管理员登录 sqlplus sys/pwd as sysdba sql->alter user jd account unlock; commit; SQL> password new ...
- CustomView
https://github.com/eltld/CustomView
- centos 7.xx 安装LAMP环境
一.安装Apache 1.安装yum -y install httpd2.开启apache服务systemctl start httpd.service3.设置apache服务开机启动systemct ...
- 每天一个JavaScript实例-apply和call的使用方法
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- [转]GPS经纬度的表示方法及换算
想要认识GPS中的经纬度,就必须先了解GPS,知道经纬度的来源: 1. GPS系统组成 GPS是 Gloabal Positioning System 的简称,意为全球定位系统,主要由地面的控制站.天 ...
- Java中需要了解的点
1.32位jvm.64位区别? 2.
- js中return的作用
1.终止函数的继续运行. 当遇到if…… else是.若出现return,就会出现终止运行,不会继续做出判断 <html> <head> <title>return ...