1. 程式人生 > >最大、最小表示法 模板

最大、最小表示法 模板

模板

int getMin(char s[],int len)
{
	int i=0,j=1,k;
	while(i<len&&j<len)
	{
		for(k=0;k<len;k++)
			if(s[(i+k)%len]!=s[(j+k)%len]) break;
		if(k>=len) break;
		if(s[(i+k)%len]>s[(j+k)%len])
			i=max(i+k+1,j+1);
		else j=max(j+k+1,i+1);
	}
	return min(i,j);
}

int getMax(char s[],int len)
{
	int i=0,j=1,k;
	while(i<len&&j<len)
	{
		for(k=0;k<len;k++)
			if(s[(i+k)%len]!=s[(j+k)%len]) break;
		if(k>=len) break;
		if(s[(i+k)%len]<s[(j+k)%len])
			i=max(i+k+1,j+1);
		else j=max(j+k+1,i+1);
	}
	return min(i,j);
}

相關推薦

表示 模板

模板 int getMin(char s[],int len) { int i=0,j=1,k; while(i<len&&j<len) { for(k=0;k<len;k++) if(s[(i+k)%len]!=s[(j+

hdu-2609 How many---表示模板+set判重

str AC lse ron max insert sin AS 最小表示法 題目鏈接: http://acm.hdu.edu.cn/showproblem.php?pid=2609 題目大意: 有n個有01組成的字符串,每個字符串都代表一個項鏈,那麽該字符串就是一個環狀的

ZOJ 1729 & ZOJ 2006(表示模板題)

輸出每個字串的最小字典序字串的下標! #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace

表示模板(洛谷P1368 工藝)(表示

洛谷題目傳送門 最小表示是指一個字串通過迴圈位移變換(第一個移到最後一個)所能得到的字典序最小的字串。 因為是環狀的,所以肯定要先轉化為序列,把原串倍長。 設決策點為一個表示法的開頭。比較兩個決策點\(i,j\),找到它們的LCP(假設長度為\(k\))。 假設\(s_{i+k}>s_{j+k}

hdu 2609 How many(表示模板+set判重)

題目連結: 解題思路: 題目大意: 有n個有01組成的字串,每個字串都代表一個項鍊,那麼該字串就是一個環狀的結構,求可以經過迴圈旋轉,最後不同的串有多少個。。 演算法思想: 將每個字串轉換成最小串,

【題解】POJ 1509 Glass Beads 表示模板

ostream 字母 void stream ldr fine clu 輸出 ring vjudge 題目大意TLDR 有$n$個首尾相接的字符串,每個字符串均由小寫字母構成,要求在環上找到一個斷點,使得斷開後所得的字符串字典序最小。 若有多處斷點斷開所得的字符串相同

插頭DP_表示 模板詳解

宣告演算法說明如果還不知道插頭dp中插頭以及輪廓線等概念是什麼東西的話,請移步:插頭與輪廓線與基於連通性狀態壓縮的動態規劃那麼這裡就簡單說一下狀態的轉移:對於m列的格子,用一個m+1的陣列code來表示輪廓線上的資訊(包括連通性)。對於當前的格子(i,j),code[j-1]

連續子數組和,絕對值

面試連續子數組最大和,可考慮public class Solution { public int maxSubArray(int[] nums) { int len=nums.length; if(nums==null || len==0)return 0;

awk 統計特定pv和響應時間的平均值

用戶 特定 ado awk alt $1 最大 log文件 執行 今天有朋友向我請教對一個access log文件裏按URL+IP進行pv和響應時間統計,順便寫了個awk腳本,在此分享一下 access log格式第一列為域名,第二列為響應時間 第三列為用戶ip www.b

UVA1349(帶權二分圖匹配 --> KM算模板

amp slack == 還需要 構造 有一個 using lac str UVA1349 題意:給定一些有向帶權邊,求出把這些邊構造成一個個環,總權值最小 解法: 對於帶權的二分圖的匹配問題可以用通過KM算法求解。 要求最大權匹配就是初始化g[i][j]為0,直接跑就可以

動態規劃 硬幣問題,求可以組成一個錢數的數

核心思想:         在我們從 1 元開始依次找零時,可以嘗試一下當前要找零的面值(這裡指 1 元)是否能夠被分解成另一個已求解的面值的找零需要的硬幣個數再加上這一堆硬幣中的某個面值之和,如果這樣分解之後最終的硬幣數是最少的,

C ++ 陣列 | 尋找值,陣列(Array)_1

目錄 尋找最大、最小值 陣列 尋找最大、最小值 對於這個程式設計測驗,我們將找到使用者將輸入的15個數字的最小值和最大值以及平均值。 #include <iostream> int main() { int userInput = 0; int

java8 list統計(求和平均)

list.stream().mapToDouble(User::getHeight).sum()//和 list.stream().mapToDouble(User::getHeight).max()//最大 list.stream().mapToDouble(User:

MYSQL group by 分組後只取值對應的記錄方法

這裡有2篇文章 綜合起來就差不多了 工作忙 沒時間整理 其實和其它資料庫一樣 並沒有什麼捷徑 效率的話還是join比較快 MYSQL每個使用者取1條記錄的三種寫法(group by xxx) 同學問我關於這方面的SQL語句,我特意記憶一下,畢竟這個也比較常見了

傳入一個integer陣列,取出

/** * <p> * 傳入一個integer陣列,取出最大值 * </p> * @author yunns 2015年11月19

awk 求和平均值

1、求和 cat data|awk '{sum+=$1} END {print "Sum = ", sum}' 2、求平均 cat data|awk '{sum+=$1} END {print "Average = ", sum/NR}' 3、求最大值 cat data|a

演算法導論第六章之

堆是很重要的一種資料結構,常常用在排序和優先佇列的實現上,當然在C++ STL中有優先佇列的實現,但是者並不妨礙我們去學習他。 堆其實是一種陣列物件,也就是說他的資料全部都儲存在陣列中,它可以被視為一棵完全二叉樹(不懂二叉樹的請自行百度)。(二叉堆)堆有兩種:

資料分析裡面的一些常用指標的特點(平均中位數....)

處理空值的技巧 空值處理的第一種思路是“用最接近的資料來替換它”。這並不是意味著拿它相鄰的單元格來替換,而是你需要尋找除了空的這個單元格,哪一行資料在其他列上的內容與存在空值的這行資料是最接近的,然後用該行的資料進行替換。這種方式較為嚴謹,但也比較費事。 第二種思路是針對數

表示 詳解+模板+例題

最小表示法是求與某個字串迴圈同構的所有字串中,字典序最小的串是哪個。 比如說一個字串jdrakioi,它長為8,也就是說最多有八種迴圈同構的方法。 jdrakioi、drakioij、rakioijd、akioijdr、kioijdra、ioijdrak、oijdraki、ijdrakio。 這幾個串在

51nod 1282 時鐘 (雜湊字串的表示

題目 題解 要判斷時鐘是否相同,只需將時鐘的指標排序後求出M個距離,然後看距離陣列是否是迴圈同構即可。 迴圈同構: abcd的迴圈同構有:abcd、bcda、cdba、dabc。 要判斷是否迴圈同構,可以求出距離陣列的最小表示。然後對這個最小表示陣