问题最终转化为,求出 height 数组后,求 max{ (j- i+ 1)* ( min( height[i..j] ) ) },相当于找一个最大的矩形。
求F(a^b)% c 因为 c 比较小,可求出其循环节。
代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef __int64 LL;
int const N= 200110;
int wa[N], wb[N], ws[N], wv[N];
int rank[N], height[N], sa[N], r[N], n;
int a, b, c;
int fib[1000010], hash[1010][1010];
int L[N], R[N];
int cmp( int* r, int a, int b, int L ){
return r[a]== r[b] && r[a+ L]== r[b+ L];
}
void da( int* r, int* sa, int n, int m ){
int i, j, p, *x= wa, *y= wb, *t;
for( i= 0; i< m; ++i ) ws[i]= 0;
for( i= 0; i< n; ++i ) ws[ x[i]= r[i] ]++;
for( i= 1; i< m; ++i ) ws[i]+= ws[i-1];
for( i= n- 1; i>= 0; i-- ) sa[ --ws[ x[i] ] ]= i;
for( j= 1, p= 1; p< n; j*= 2, m= p ){
for( p= 0, i= n- j; i< n; ++i ) y[p++]= i;
for( i= 0; i< n; ++i )
if( sa[i]>= j ) y[p++]= sa[i]- j;
for( i= 0; i< n; ++i ) wv[i]= x[ y[i] ];
for( i= 0; i< m; ++i ) ws[i]= 0;
for( i= 0; i< n; ++i ) ws[ wv[i] ]++;
for( i= 1; i< m; ++i ) ws[i]+= ws[i-1];
for( i= n- 1; i>= 0; i-- ) sa[ --ws[ wv[i] ] ]= y[i];
t= x, x= y, y= t; p= 1; x[ sa[0] ]= 0;
for( i= 1; i< n; ++i )
x[ sa[i] ]= cmp( y, sa[i-1], sa[i], j )? p- 1: p++;
}
}
void calheight( int* r, int* sa, int n ){
int i, j, k= 0;
for( i= 1; i<= n; ++i ) rank[ sa[i] ]= i;
for( i= 0; i< n; height[ rank[i++] ]= k )
for( k? k--: 0, j= sa[ rank[i]- 1]; r[i+ k]== r[j+ k]; k++ );
}
int getRepeat(){
for( int i= 0; i<= c; ++i )
for( int j= 0; j<= c; ++j ) hash[i][j]= 0;
fib[0]= 0; fib[1]= 1; hash[0][1]= 1;
int i= 2;
while( true ){
fib[i]= ( fib[i-1]+ fib[i-2] )% c;
if( hash[ fib[i-1] ][ fib[i] ] ) return i;
hash[ fib[i-1] ][ fib[i] ]= 1;
i++;
}
}
int modExp( int a, int b, int c ){
LL t= 1, x= a% c;
while( b ){
if( b& 1 ) t= t* x% c;
x= x* x% c; b>>= 1;
}
return t% c;
}
int main(){
int test;
scanf("%d",&test );
for( int te= 1; te<= test; ++te ){
scanf("%d%d%d%d", &a, &b, &c, &n );
int mod= getRepeat()- 1;
int ans= modExp( a, b, mod );
r[0]= ( ( (LL)fib[ans]* (LL)c )% 200003 );
for( int i= 1; i< n; ++i )
r[i]= ( ( (LL)r[i-1]* (LL) r[i-1] )% 200003 );
r[n]= 0;
for( int i= 0; i< n; ++i ) r[i]++;
da( r, sa, n+ 1, 200010 );
calheight( r, sa, n );
int i, j;
for( i= 0; i<= n; ++i ) L[i]= 0, R[i]= 0;
for( i= 1; i<= n; ++i ){
for( j= i; j> 1 && height[j]<= height[j-1]; j= L[j-1] );
L[i]= j;
}
LL res= 0;
for( i= n; i>= 1; i-- ){
for( j= i; j< n && height[j]<= height[j+1]; j= R[j+1] );
R[i]= j;
if( (LL)( R[i]- L[i]+ 1 )* height[i]> res )
res= (LL)( R[i]- L[i]+ 1 )* height[i];
}
printf("Case %d: %I64d\n", te, res );
}
return 0;
}
分享到:
相关推荐
该题目使用后缀数组来解决,预处理时间复杂度为 O(|A|+|B|),然后使用二分搜索来找到相应的子串。 HDU 4029 Distinct Sub-matrix 该题目要求找出不同子矩形个数,N,M^7。该题目使用哈希函数来解决,枚举子矩形的列...
"FOj部分水题AC答案"这个标题表明这是一组来自FOj(可能是某个在线编程竞赛平台的简称)的简单问题,其中部分问题已经得到了正确的解答(AC是Accepted的缩写,表示程序通过了所有测试用例)。 在描述中提到"代Un的...
对于想要掌握这门技能的人来说,参加在线编程评测,如fzu online judge,是一个行之有效的途径。fzu online judge是一个面向编程爱好者和学习者的平台,提供了丰富的算法题目,供用户在线解答。这些题目虽然难度不一...
求最大乘积 的源代码 次题是fzu 4月月赛题 是一道数学题啊
不要下载此版的,请下载最新的http://download.csdn.net/source/1664620 离线版的福大acm在线评测OJ系统题目 更新到2009年8月 (注:chm电子书格式化)
根据给定的信息,我们可以将问题转化为数学模型,然后进行分析。 ### 问题描述 第七届龟兔赛跑比赛在火星上举行。与以往不同的是,这次比赛的目标不是看谁先到达终点,而是谁能在规定时间内跑得更远。...
### Problem 1890 竞技游戏 #### 题目背景 John 和 Smith 正在玩一种特别设计的竞技游戏。这个游戏涉及到一系列数字处理的策略与算法思考,对于初学者来说既是一个挑战也是一个很好的学习机会。游戏的具体规则如下...
该函数接收四个参数:一个灰度图像数组arr,以及两个整数d_x和d_y,它们分别表示在水平和垂直方向上的像素偏移量,最后一个参数gray_level表示灰度级数,决定着共生矩阵的大小。 函数内部首先获取图像的最大灰度值...
计算机视觉是研究如何让计算机理解和解释视觉信息,使之能够复制人类对视觉信息的处理、分析和理解能力,并做出相应的行为决策。它涉及图像采集、处理、分析和理解等多个方面,广泛应用于工业自动化、监控系统、医疗...
fzu大数据基础实验4
(This is a collection of documents relating to our Leapfrog Handbook project, including member grouping information forms, task summary documents for each group member, a project diary, and other ...
【标题】"2011 ACM 多校联合 2011 MU11 13 FZU" 指的是一项编程竞赛,ACM(国际计算机学会)每年都会举办多场这样的竞赛,旨在提升学生的算法设计和编程能力。ACM竞赛通常包括一系列的编程题目,参赛队伍需要在限定...
FZU2021计算机视觉慕课是一门面向学生和研究人员的基础课程,其中包含了丰富的实践案例和练习题。从提供的文件内容中,我们可以提取一些计算机视觉中的基础知识点,包括图像的读取、显示、转换、保存、以及图像处理...
FZU2021计算机视觉答案(四)中包含了肤色检测的实验过程和代码实现,以下是从该文件中提取出来的知识点: 1. **肤色检测的基本原理**: 肤色检测通常基于色彩空间中的色度或亮度属性,例如,在RGB色彩空间中,...
根据给定的文件标题“ACM数学_FZU绝密资料”及描述“ACM数学_FZU...............绝密..........”,我们可以看出这份资料主要聚焦于数学在ACM竞赛中的应用,尤其是在解决算法问题时数学理论的重要性。下面我们将从...
"FZU软件工程web课程复习资料-整理" 本资源是FZU软件工程web课程的复习资料,涵盖了web开发的基础知识和技术。下面是对该资源中所涉及的知识点的详细解释: 第一讲 web 开发概述 1. 因特网与万维网 因特网是一种...
FZU软件工程操作系统课程复习资料-整理 本资源摘要信息是关于FZU软件工程操作系统课程复习资料的整理,涵盖操作系统的基本概念、进程和线程、存储管理和文件系统等方面的知识点。 一、操作系统的定义和主要功能 ...
《fzu—java张苏老师课件》是一个针对Java初学者的课程资料集合,由一系列PPT文件组成,包括了从基础到进阶的多个章节。这个资源旨在帮助初学者系统地学习Java编程语言,逐步掌握其核心概念和技术。下面我们将详细...
- 实现Harris角点检测首先需要将图像转换为灰度图像,并且转换为`np.float32`类型的数组以满足`cv2.cornerHarris`函数的输入要求。 - Harris检测角点后,通过`cv2.dilate`函数对检测结果进行膨胀操作,以增强图像...