poj 3261 Milk Patterns

针对奶牛每日产奶质量变化的规律,FJ通过复杂的分类记录了连续N天的奶质数据,旨在找出至少重复K次的最长相同模式。本文介绍了一种O(nlogn)时间复杂度的算法,用于解决此问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 
Time Limit: 5000MS Memory Limit: 65536K
Total Submissions: 19143 Accepted: 8441
Case Time Limit: 2000MS

Description

Farmer John has noticed that the quality of milk given by his cows varies from day to day. On further investigation, he discovered that although he can't predict the quality of milk from one day to the next, there are some regular patterns in the daily milk quality.

To perform a rigorous study, he has invented a complex classification scheme by which each milk sample is recorded as an integer between 0 and 1,000,000 inclusive, and has recorded data from a single cow over N (1 ≤ N ≤ 20,000) days. He wishes to find the longest pattern of samples which repeats identically at least K (2 ≤ K ≤ N) times. This may include overlapping patterns -- 1 2 3 2 3 2 3 1 repeats 2 3 2 3 twice, for example.

Help Farmer John by finding the longest repeating subsequence in the sequence of samples. It is guaranteed that at least one subsequence is repeated at least K times.

Input

Line 1: Two space-separated integers: N and K 
Lines 2..N+1: N integers, one per line, the quality of the milk on day i appears on the ith line.

Output

Line 1: One integer, the length of the longest pattern which occurs at least K times

Sample Input

8 2
1
2
3
2
3
2
3
1

Sample Output

4

Source

可重叠的 k 次最长重复子串(pku3261)
给定一个字符串,求至少出现 k 次的最长重复子串,这 k 个子串可以重叠。
算法分析:
这题的做法和上一题差不多,也是先二分答案,然后将后缀分成若干组。不
同的是,这里要判断的是有没有一个组的后缀个数不小于 k。如果有,那么存在
k 个相同的子串满足条件,否则不存在。这个做法的时间复杂度为 O(nlogn)。
 
 
 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<cmath>
 5 #include<algorithm>
 6 using namespace std;  
 7 int const N=20000+3; 
 8 int rk[N],r[N],sa[N],num[N*50],wa[N<<1],wb[N<<1],wv[N],n,K,h[N];  
 9 int cmp(int *r,int x,int y,int z){
10     return r[x]==r[y] && r[x+z]==r[y+z];  
11 }
12 void build_sa(int *r,int *sa,int n,int m){
13     int i,j,p,*x=wa,*y=wb;  
14     for(i=0;i<m;i++) num[i]=0;  
15     for(i=0;i<n;i++) num[x[i]=r[i]]++;  
16     for(i=1;i<m;i++) num[i]+=num[i-1];  
17     for(i=n-1;i>=0;i--) sa[--num[x[i]]]=i;  
18     for(p=1,j=1;p<n;j<<=1,m=p){
19         for(p=0,i=n-j;i<n;i++) y[p++]=i;  
20         for(i=0;i<n;i++) if(sa[i]>=j) y[p++]=sa[i]-j;  
21         for(i=0;i<m;i++) num[i]=0;  
22         for(i=0;i<n;i++) wv[i]=x[y[i]]; 
23         for(i=0;i<n;i++) num[wv[i]]++;  
24         for(i=1;i<m;i++) num[i]+=num[i-1];  
25         for(i=n-1;i>=0;i--) sa[--num[wv[i]]]=y[i]; 
26         swap(x,y); 
27         for(p=1,x[sa[0]]=0,i=1;i<n;i++)  
28             x[sa[i]]=cmp(y,sa[i],sa[i-1],j)? p-1:p++;  
29     }
30     for(i=0;i<n;i++) rk[i]=x[i]; 
31 }
32 void build_h(int *r,int *sa,int n){
33     int k=0; 
34     for(int i=0;i<n;i++){
35         if(k) k--; 
36         int j=sa[rk[i]-1];  
37         while (r[i+k]==r[j+k]) k++;  
38         h[rk[i]]=k; 
39     } 
40 }
41 int check(int mid,int n){
42     int num=1;  
43     for(int i=1;i<=n;i++){
44         if(h[i]>=mid){
45             num++;  
46             if(num>=K) return 1; 
47         }else num=1;  
48     }
49     return 0; 
50 }
51     
52 int main(){
53     scanf("%d%d",&n,&K);  
54     for(int i=0;i<n;i++) scanf("%d",&r[i]);  
55     build_sa(r,sa,n+1,1000001); 
56     build_h(r,sa,n);  
57     int l=0,r=n,ans; 
58     while (l<=r){
59         int mid=(l+r)/2;  
60         if(check(mid,n)){
61             ans=mid; 
62             l=mid+1;
63         }else r=mid-1; 
64     }
65     printf("%d\n",ans);  
66     return 0; 
67 }

 

 

 

转载于:https://www.cnblogs.com/ZJXXCN/p/10961710.html

内容概要:本文档详细介绍了Analog Devices公司生产的AD8436真均方根-直流(RMS-to-DC)转换器的技术细节及其应用场景。AD8436由三个独立模块构成:轨到轨FET输入放大器、高动态范围均方根计算内核和精密轨到轨输出放大器。该器件不仅体积小巧、功耗低,而且具有广泛的输入电压范围和快速响应特性。文档涵盖了AD8436的工作原理、配置选项、外部组件选择(如电容)、增益调节、单电源供电、电流互感器配置、接地故障检测、三相电源监测等方面的内容。此外,还特别强调了PCB设计注意事项和误差源分析,旨在帮助工程师更好地理解和应用这款高性能的RMS-DC转换器。 适合人群:从事模拟电路设计的专业工程师和技术人员,尤其是那些需要精确测量交流电信号均方根值的应用开发者。 使用场景及目标:①用于工业自动化、医疗设备、电力监控等领域,实现对交流电压或电流的精准测量;②适用于手持式数字万用表及其他便携式仪器仪表,提供高效的单电源解决方案;③在电流互感器配置中,用于检测微小的电流变化,保障电气安全;④应用于三相电力系统监控,优化建立时间和转换精度。 其他说明:为了确保最佳性能,文档推荐使用高质量的电容器件,并给出了详细的PCB布局指导。同时提醒用户关注电介质吸收和泄漏电流等因素对测量准确性的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值