找最小的重複子字符串

問題 D: 大數
時間限制: 1 Sec 內存限制: 128 MB
提交: 2410 解決: 450
[狀態] [提交] [命題人:外部導入]
題目描述
小七是一個很可愛很努力的女孩子。她對大數的運算非常感興趣,在學習了幾天之後,終於精通了大數的加減乘除。但是自從她學會了 JAVA ,她覺得大數實在是太簡單太無聊了,因爲運用 JAVA 中 BigInteger 大整數類,可以輕鬆實現大數的加減乘除。某一天她突然發現,很多大數的題目的數據都有規律。這些數都是由比他小的某個數重複構成,比如說 121212 由 12重複構成 ,233233 ,由233重複構成,而1231231並不是由123重複構成。無聊的小七終於找到了樂子,她想要找到每個大數是由哪個比它小的數重複構成。算法剛入⻔的小七無法解決這個問題,於是她求助於你。

輸入
一行 一個正整數n(n<=101000000)。
輸出
一行
如果存在多種,輸出最小的滿足題意的數;
如果不存在,則輸出-1.

樣例輸入 Copy
121212
樣例輸出 Copy
12

#include "bits/stdc++.h"
typedef long long ll;
using namespace std;
string temp;
bool judge(string s) {
	int len=s.size(),i=0,t=0;
	for(t=1; t<=len/2; ++t) {
		if (len%t) continue;//有餘數,一定不爲週期串
		for (i=t; i<len&&s[i%t]==s[i]; ++i);
		if (i==len) {
			temp=s.substr(0,t);
			return true;
		}
	}
	return false;
}
int main() {
	string a;
	cin>>a;
	if(judge(a))cout<<temp;
	else cout<<-1;
	return 0;
}
/*測試樣例1
121212
*/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章