码迷,mamicode.com
首页 > 其他好文 > 详细

bzoj4698 / P2463 [SDOI2008]Sandy的卡片

时间:2019-01-06 14:32:59      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:void   长度   http   using   printf   hide   view   sdoi   https   

P2463 [SDOI2008]Sandy的卡片

直接二分长度暴力匹配.......

跑的还挺快

(正解是后缀数组的样子)

技术分享图片
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 void read(int &x){
 6     char c=getchar();x=0;
 7     while(c<0||c>9)c=getchar();
 8     while(0<=c&&c<=9)x=x*10+(c^48),c=getchar();
 9 }
10 #define N 1002
11 int n,a[N][N],b[N];
12 bool ask2(int st,int x){
13     bool p;
14     for(int i=2;i<=n;++i){
15         p=0;
16         for(int j=1;!p&&j<=b[i]-x+1;++j){
17             int v=a[1][st]-a[i][j];p=1;
18             for(int k=1;p&&k<x;++k)
19                 if(a[1][st+k]!=a[i][j+k]+v)p=0;
20         }if(!p) return 0;
21     }return 1;
22 }
23 bool ask1(int x){
24     if(x==1) return 1;
25     for(int i=1;i<=b[1]-x+1;++i)
26         if(ask2(i,x)) return 1;
27     return 0;
28 }
29 int main(){
30     read(n); int k=1;
31     for(int i=1;i<=n;++i){
32         read(b[i]);
33         if(b[k]>b[i]) k=i;
34         for(int j=1;j<=b[i];++j) read(a[i][j]);
35     }if(k!=1) swap(a[1],a[k]),swap(b[1],b[k]);
36     int l=1,r=b[1],mid;
37     while(l+1<r){
38         mid=l+((r-l)>>1);
39         if(ask1(mid)) l=mid;
40         else r=mid-1;
41     }printf("%d",ask1(r)?r:l);
42     return 0;
43 }
View Code

丧心病狂压行版

技术分享图片
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define re return
 4 int n,a[1002][1002],b[1002],k;
 5 bool ask2(int s,int x){
 6     for(int i=2,j,k;i<=n;++i){bool p=0;
 7         for(j=1;!p&&j<=b[i]-x+1;++j){p=1;
 8             for(k=1;p&&k<x;++k)
 9                 if(a[1][s+k]!=a[i][j+k]+a[1][s]-a[i][j])p=0;
10         }if(!p) re 0;}re 1;}
11 bool ask1(int x){for(int i=1;i<=b[1]-x+1;++i)if(ask2(i,x))re 1;re 0;}
12 int main(){cin>>n;k=1;
13     for(int i=1,j;i<=n;++i){cin>>b[i];if(b[k]>b[i])k=i;
14         for(j=1;j<=b[i];++j)cin>>a[i][j];
15     }if(k!=1)swap(a[1],a[k]),swap(b[1],b[k]);
16     int l=1,r=b[1],mid;
17     while(l+1<r)mid=l+r>>1,ask1(mid)?l=mid:r=mid-1;
18     cout<<(ask1(r)?r:l);}
View Code

 

bzoj4698 / P2463 [SDOI2008]Sandy的卡片

标签:void   长度   http   using   printf   hide   view   sdoi   https   

原文地址:https://www.cnblogs.com/kafuuchino/p/10228462.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!