1. 程式人生 > >用 Haskell 求解 ACM 競賽題(9):環狀序列(Circular Sequence, ACM/ ICPC Seoul 2004, UVa1584)

用 Haskell 求解 ACM 競賽題(9):環狀序列(Circular Sequence, ACM/ ICPC Seoul 2004, UVa1584)

問題:
環狀序列(Circular Sequence, ACM/ ICPC Seoul 2004, UVa1584) 環狀串長度 為 n 的環狀串 有 n 種 表示 法, 分別為從某個位置開始順時針得到。 例如, 圖 3- 4 的環狀串有 10 種表示: CGAGTCAGCT, GAGTCAGCTC, AGTCAGCTCG 等。 在這些表示法 中, 字典序最小的稱為" 最小表示"。 輸入一個長度為 n( n ≤ 100) 的環狀DNA串(只包含 A、 C、 G、 T 這 4 種 字元)的一種表示法, 你的任務是輸出 該 環狀 串 的 最小表示。 例如, CTCC 的最小表示是 CCCT,CGAGTCAGCT 的最小表示 為 AGCTCGAGTC。

C 語言程式碼:

#include <stdio.h> 
#include <string.h> 
#define maxn 105 //環狀 串 s 的 表示 法 p 是否 比 表示 法 q 的 字典 序 小 
int less (const char* s, int p, int q) { 
	int n = strlen( s); 
	for (int i = 0; i < n; i++) 
		if (s[( p+ i)% n] != s[( q+ i)% n]) return s[( p+ i)% n] < s[( q+ i)% n]; 
	return 0; //相等 
} 

int main() { 
	int T; 
	char s[ maxn]; 
	scanf("% d", &T); 
	while( T--) { 
		scanf("% s", s); 
		int ans = 0; 
		int n = strlen( s); 
		for (int i = 1; i < n; i++) 
			if( less( s, i, ans)) ans = i; 
		for( int i = 0; i < n; i++) 
			putchar( s[( i+ ans)% n]); 
		putchar('\ n'); 
	} 
	return 0; 
}

Haskell 語言程式碼:

genList' s 0 = []
genList' (x:xs) n = (x:xs) :(genList' (xs ++ [x]) (n-1))
genList s = genList' s (length s)
minstr s = minimum (genList s)

相關推薦

Haskell 求解 ACM 競賽題9環狀序列Circular Sequence, ACM/ ICPC Seoul 2004, UVa1584

問題: 環狀序列(Circular Sequence, ACM/ ICPC Seoul 2004, UVa1584) 環狀串長度 為 n 的環狀串 有 n 種 表示 法, 分別為從某個位置開始順時針得到

【紫書】例題3-6 環狀序列Circular Sequence, ACM/ICPC Seoul 2004, UVa1584

alt scanf tdi post audio 描述 spa log return 【題目描述】 長度為n的環狀串有n種表示法,分別為某個位置開始順時針得到。例如,圖中的環狀串有10種表示: CGAGTCAGCT,GAGTCAGCTC,AGTCAGCTCG等。在這些表示

環狀序列Circular Sequence, ACM/ICPC Seoul 2004, UVa1584

例如 col ctc 字典序 scan 輸入 rcu 16px ret 長度為n的環狀串有n種表示法,分別為從某 個位置開始順時針得到。例如,圖3-4的環狀串 有10種表示: CGAGTCAGCT,GAGTCAGCTC,AGTCAGCTCG等。 在這些表示法中,字典

Haskell 求解 ACM 競賽題3順序結構程式設計

三位數反轉 例題 三位數反轉:輸入一個三位數, 分離出它的百位、 十位和個位,反轉後輸出。 樣例輸入: 127 樣例輸出: 721 【分析】 首先將三位數讀入變數 n, 然後進行分離。 百位等於 n/ 100( 注意這裡取的是商 的整數部分),十位等於 n/10

Haskell 求解 ACM 競賽題1Hello,World!

找了一本用C語言編寫的ACM競賽教程,把其中的程式用 Haskell 重寫一遍,這可能是熟悉 Haskell 的最好辦法。首先我們看一看 Hello 程式如何實現。如果有 C 語言基礎,應該很容易理解 Haskell 程式碼。 Hello, world main = do

Haskell 求解 ACM 競賽題5for 迴圈

for 迴圈 考慮這樣一個問題: 列印 1, 2, 3,…, 10, 每個 佔 一行。 本著“ 解決問題 第一” 的思想, 很容易寫出程式: 10 條 printf 語句就可以了。 或者也可以寫一條,

Haskell 求解 ACM 競賽題7階乘之和

問題:階乘 之和 輸入 n, 計算 S = 1! + 2! + 3! +… + n! 的末 6 位( 不含前導 0)。 n≤106n ≤ 10^6n≤106, n! 表示前 n 個正整數之積。 樣例輸入: 10 樣例輸出: 37913 【分析】 這個任務並不

23種設計模式9訪問者模式

類方法 打印 interface 增加 http col visitor 設計模式的 接口 定義:封裝某些作用於某種數據結構中各元素的操作,它可以在不改變數據結構的前提下定義作用於這些元素的新的操作。 類型:行為類模式 類圖: 訪問者模式可能是行為類模式中最

【紫書】例題3-5 生成元Digit Generator, ACM/ICPC Seoul 2005, UVa1583

暴力 真的 mes sed stream 簡單 post flag 個數 【題目描述】 如果x加上x的各個數字之和得到y,就說x是y的生成元。給出n(1≤n≤100000),求最小生成元。無解輸出0。例如,n=216,121,2005時的解分別為198,0,1979。 【代

牛客網暑期ACM多校訓練營第三場Coloring Tree函數的思想

ems put any n-1 ace sta .html res ted 之前兩次遇到過函數的思想的題,所以這次很敏感就看出來了。可以參考之前的題: https://www.cnblogs.com/hua-dong/p/9291507.html Christm

Java併發程式設計9死鎖含程式碼

JAVA大資料中高階架構 2018-11-10 14:04:32當執行緒需要同時持有多個鎖時,有可能產生死鎖。考慮如下情形: 執行緒A當前持有互斥所鎖lock1,執行緒B當前持有互斥鎖lock2。接下來,當執行緒A仍然持有lock1時,它試圖獲取lock2,因為執行緒B正持有lock2,因此執行緒A會阻塞等

Java並發編程9死鎖含代碼

卻又 產生 因此 break 都沒有 run new t 結果 架構 JAVA大數據中高級架構 2018-11-10 14:04:32當線程需要同時持有多個鎖時,有可能產生死鎖。考慮如下情形: 線程A當前持有互斥所鎖lock1,線程B當前持有互斥鎖lock2。接下來,當線程

python來實現機器學習線性迴歸linear regression

需要下載一個data:auto-mpg.data 第一步:顯示資料集圖 import pandas as pd import matplotlib.pyplot as plt columns = ["mpg","cylinders","displacement","horsepowe

Python基礎9高階函式map,reduce,filter,sorted

高階函式 定義:一個函式,可以接收另一個函式作為引數,這種函式稱之為高階函式。 理論基礎:  1:函式可以接收變數 2:函式名是指向函式的變數。 例如:abs,原本指向一個計算絕對值的函式,將他指向123後,abs變數就不再具有計算絕對值的能力。 map/

9.spring事務管理:宣告式事務管理

宣告式事務管理  sprin的宣告式事務是管理AOP技術實現的事務管理,其本質是是對方法前後進行攔截,然後 在目標方法開始之前建立或者加入一個事務,在執行完成目標方法之後根據執行情況提交或者回滾事務。   宣告式事務管理優點:不需要通過程式設計的方式管理事務,因而不需要在業務邏輯程

得分Score,ACM/ICPC Seoul 2005,UVa1585

There is an objective test result such as ``OOXXOXXOOO". An `O' means a correct answer of a problem and an `X' means a wrong answer. The

樹莓派3學習筆記77寸分辨率800 480顯示器配置

樹莓派、顯示器配置樹莓派3學習筆記(7):7寸(分辨率800 480)顯示器配置 樹莓派搭載分辨率為800X480的顯示器在顯示的時候可能會遇到無法全屏顯示的問題, 顯示器只有部分能夠顯示,有一部分是黑邊,對於這一種情況,我們只需進入系統的boot目錄,找到config.txt文件,或者直接在命

在Python中用Request庫模擬登錄字幕庫無加密,無驗證碼

用戶名 com color 了無 1-1 value img requests log 如此簡單(不安全)的登錄表單已經不多見了。字幕庫的登錄表單如下所示,其中省去了無關緊要的內容: 1 <form class="login-form" action="/User/

TypeScript學習筆記裝飾器Decorators

標註 時裝 als cal () 操作 enume 筆記 文檔 裝飾器簡介 裝飾器(Decorators)為我們在類的聲明及成員上通過元編程語法添加標註提供了一種方式。 需要註意的是:裝飾器是一項實驗性特性,在未來的版本中可能會發生改變。 若要啟用實驗性的裝飾器特性

深入理解JavaScript系列16閉包Closures

ava hive auto flow style this quest 情況 知識 介紹 本章我們將介紹在JavaScript裏大家常常來討論的話題 —— 閉包(closure)。閉包事實上大家都已經談爛了。雖然如此,這裏還是要試著從理論角度來討論下閉包,