bzoj4698 / P2463 [SDOI2008]Sandy的卡片
直接二分长度暴力匹配.......
跑的还挺快
(正解是后缀数组的样子)
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
void read(int &x){
char c=getchar();x=;
while(c<''||c>'')c=getchar();
while(''<=c&&c<='')x=x*+(c^),c=getchar();
}
#define N 1002
int n,a[N][N],b[N];
bool ask2(int st,int x){
bool p;
for(int i=;i<=n;++i){
p=;
for(int j=;!p&&j<=b[i]-x+;++j){
int v=a[][st]-a[i][j];p=;
for(int k=;p&&k<x;++k)
if(a[][st+k]!=a[i][j+k]+v)p=;
}if(!p) return ;
}return ;
}
bool ask1(int x){
if(x==) return ;
for(int i=;i<=b[]-x+;++i)
if(ask2(i,x)) return ;
return ;
}
int main(){
read(n); int k=;
for(int i=;i<=n;++i){
read(b[i]);
if(b[k]>b[i]) k=i;
for(int j=;j<=b[i];++j) read(a[i][j]);
}if(k!=) swap(a[],a[k]),swap(b[],b[k]);
int l=,r=b[],mid;
while(l+<r){
mid=l+((r-l)>>);
if(ask1(mid)) l=mid;
else r=mid-;
}printf("%d",ask1(r)?r:l);
return ;
}
丧心病狂压行版
#include<bits/stdc++.h>
using namespace std;
#define re return
int n,a[][],b[],k;
bool ask2(int s,int x){
for(int i=,j,k;i<=n;++i){bool p=;
for(j=;!p&&j<=b[i]-x+;++j){p=;
for(k=;p&&k<x;++k)
if(a[][s+k]!=a[i][j+k]+a[][s]-a[i][j])p=;
}if(!p) re ;}re ;}
bool ask1(int x){for(int i=;i<=b[]-x+;++i)if(ask2(i,x))re ;re ;}
int main(){cin>>n;k=;
for(int i=,j;i<=n;++i){cin>>b[i];if(b[k]>b[i])k=i;
for(j=;j<=b[i];++j)cin>>a[i][j];
}if(k!=)swap(a[],a[k]),swap(b[],b[k]);
int l=,r=b[],mid;
while(l+<r)mid=l+r>>,ask1(mid)?l=mid:r=mid-;
cout<<(ask1(r)?r:l);}
bzoj4698 / P2463 [SDOI2008]Sandy的卡片的更多相关文章
- 洛谷 P2463 [SDOI2008]Sandy的卡片 解题报告
P2463 [SDOI2008]Sandy的卡片 题意 给\(n(\le 1000)\)串,定义两个串相等为"长度相同,且一个串每个数加某个数与另一个串完全相同",求所有串的最长公 ...
- 【BZOJ4698】Sdoi2008 Sandy的卡片 后缀数组+RMQ
[BZOJ4698]Sdoi2008 Sandy的卡片 Description Sandy和Sue的热衷于收集干脆面中的卡片.然而,Sue收集卡片是因为卡片上漂亮的人物形象,而Sandy则是为了积攒卡 ...
- 【BZOJ4698】[SDOI2008]Sandy的卡片
[BZOJ4698][SDOI2008]Sandy的卡片 题面 flag倒了. bzoj 洛谷 题解 首先题目的区间加很丑对吧, 将每个串差分一下,就可以转化为 求: 给定\(N\)个串,求他们的最长 ...
- P2463 [SDOI2008]Sandy的卡片[差分+串拼接后缀数组]
P2463 [SDOI2008]Sandy的卡片 套路都差不多,都是差分后二分答案找lcp.只是这题要把多个串拼接起来成为一个大串,中间用某些值域中没有的数字相隔(最好间隔符都不一样想想为什么),排序 ...
- 【bzoj4698】[Sdoi2008] Sandy的卡片 后缀数组
题目描述 Sandy和Sue的热衷于收集干脆面中的卡片.然而,Sue收集卡片是因为卡片上漂亮的人物形象,而Sandy则是为了积攒卡片兑换超炫的人物模型.每一张卡片都由一些数字进行标记,第i张卡片的序列 ...
- 洛谷P2463 [SDOI2008]Sandy的卡片(后缀数组SA + 差分 + 二分答案)
题目链接:https://www.luogu.org/problem/P2463 [题意] 求出N个串中都出现的相同子串的最长长度,相同子串的定义如题:所有元素加上一个数变成另一个,则这两个串相同,可 ...
- Luogu P2463 [SDOI2008]Sandy的卡片
题目链接 \(Click\) \(Here\) 真的好麻烦啊..事实证明,理解是理解,一定要认认真真把板子打牢,不然调锅的时候真的会很痛苦..(最好是八分钟能无脑把\(SA\)码对的程度\(QAQ\) ...
- P2463 [SDOI2008]Sandy的卡片
写一种\(O(nm)\)的做法,也就是\(O(\sum 串长)\)的. 先通过差分转化,把每个数变成这个数与上一个数的差,第一个数去掉,答案就是最长公共子串+1 按照套路把所有串拼起来,中间加一个分隔 ...
- 洛咕 P2463 [SDOI2008]Sandy的卡片
哈希水过. 首先这是一段delta相同的序列,按照套路差分一下,b[i]=a[i]-a[i-1],然后就是这些序列的最长公共子段 由于数据范围很小,就可以二分,枚举第一个序列的子段然后每个子序列暴力c ...
随机推荐
- js动态规划---背包问题
//每种物品仅有一件,可以选择放或不放 //即f[i][w]表示前i件物品恰放入一个容量为w的背包可以获得的最大价值. //则其状态转移方程便是:f[i][w]=max{f[i-1][w],f[i-1 ...
- selenium键盘操作
键盘操作需引用: from selenium.webdriver.common.keys import Keys 操作码表: NULL = '\ue000' CANCEL = '\ue001' # ^ ...
- Oracle查询表占用空间的大小
select * from (select OWNER, segment_name, segment_type, sum(bytes) mmm from dba_segments where /*ta ...
- tfs团队项目删除原来连接的默认账户
1.在用visual studio 连接团队项目时,首次输入用户名和密码后,默认保存住凭据了,等以后连接会自动采用首次的凭证. 但是如何采用新的用户重新登录呢.如图所示,删除原有的凭证.删除后重启电脑 ...
- clientWidth,offsetWidth,scrollWidth区别
<html> <head> <title>clientWidth,offsetWidth,scrollWidth区别</title> </head ...
- html5-新增表单的小结details summary
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- Windsor
https://github.com/castleproject/Windsor https://github.com/castleproject/Windsor/blob/master/docs/R ...
- QDialog 使用Demo
[1].pro QT += core gui greaterThan(QT_MAJOR_VERSION, ): QT += widgets TARGET = TestDialog TEMPLATE = ...
- wingide 远程调试
1.首先你应该在本地安装wingide 6.1版本 2.大多数电脑.py文件都不能以wingide的形式打开(异常苦逼),无论是从“属性”或者是“设置”里面都不可以,无奈之下只能通过修改注册表的方式进 ...
- 查看完整的 Unicode 字符集
https://unicode-table.com/cn/ 这个链接是我想要查的 格式如下图 先放这里收藏,我也不知道怎么搜索