問題A.簽到題 題目詳解
簽到題
Problem
小Z在無意中發現了一個神奇的OJ,這個OJ有一個神奇的功能:每日簽到,並且會通過某種玄學的演算法計算出今日的運勢。在多次試驗之後,小Z發現自己的運勢按照一定的週期迴圈,現在他找到了你,通過他的記錄,請你幫忙找出他運勢的迴圈節。
Input
第一行一個整數n,表示小Z記錄的天數
接下來n行,表示每天的運勢,用一個正整數表示,相同的整數表示相同的運勢,不同的整數表示不同的運勢。
Output
一行若干個整數表示所有可能的小於等於n的迴圈節。
Example
Input
6
1 2 1 1 2 1
output
3 5 6
Hint
對於100%的資料,n<=365,每天的運勢不會爆int
題目分析
本題是一道水題。題目的意思即為讓我們求出字串的所有小於等於長度的週期,這應該都能理解,然後我們直接套用KMP模板,求出字串的所有的Border,也就求出了所有的週期。上述文字看不懂的同學們可以參考2017年WC 的金策的《字串演算法》,然而我並沒有連結。。。
程式碼
就是一個KMP
#include<cstdlib>
#include<cstdio>
#include<algorithm>
#define maxn 370
using namespace std ;
int len,f[maxn],s[maxn];
void KMP(){
f[0]=f[1]=0;
for(int i=2;i<=len;i++){
int op=f[i-1];
while(op!=0&&s[op]!=s[i-1])op=f[op];
f[i]=((s[op]==s[i-1])?op+1:0);
}
return;
}
int main(){
/*freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);*/
scanf("%d",&len);
for(int i=0;i<len;i++)
scanf("%d",&s[i]);
KMP();
int ans[maxn],cnt=0;
int k=len;
while(f[k]!=0){ans[cnt++]=len-f[k];k=f[k];}
ans[cnt++]=len;
sort(ans,ans+cnt);
for(int i=0;i<cnt;i++){
printf("%d ",ans[i]);
}
return 0;
}
相關推薦
問題A.簽到題 題目詳解
簽到題 Problem 小Z在無意中發現了一個神奇的OJ,這個OJ有一個神奇的功能:每日簽到,並且會通過某種玄學的演算法計算出今日的運勢。在多次試驗之後,小Z發現自己的運勢按照一定的週期迴圈,現在他找到了你,通過他的記錄,請你幫忙找出他運勢的迴圈節。
HUD 1506 Largest Rectangle in a Histogram(單調棧的應用)(題目詳解)
A histogram is a polygon composed of a sequence of rectangles aligned at a common base line. The rectangles have equal widths but may have different height
HTML中javascript的<script>標簽使用方法詳解
mime類型 jsp source 方式 clas 處理 網頁 鏈接 屬性。 原文地址:HTML中javascript的<script>標簽使用方法詳解 只要一提到把JavaScript放到網頁中,就不得不涉及Web的核心語言——HTML。在當初開發javasc
西南交通大學計算機專業考研真題答案詳解6:2012年演算法設計題
一、考研真題 1、下面是求兩個集合A和B的並集(AUB)的演算法,集合A和集合B分別用單鏈表La和Lb的帶頭結點的單鏈表表示(連結串列中的資料按升序排序),其並集用單鏈表Lc表示(帶頭結點,其資料也按升序排列),請填空完善演算法。(每空2分)。 2、對給定的帶頭結點的單鏈表L,結點值得型
西南交通大學計算機專業考研真題答案詳解8:2010年演算法設計題
一、考研真題 3、設計一演算法,實現在資料元素有序的順序儲存結構的線性表中插入一個值為x的操作。如果無儲存空間則插入失敗,函式的返回值為插入成功與否的標誌。(8分) 4、設有兩個整數集合A和B,分別用遞增有序連結串列表示,設計一演算法實現兩個集合的聯合運算,運算結果也有遞增有序連結串列表
leetCode 349號題目詳解 兩個陣列的交集 ,python3兩種方式實現, 複雜度分別為O(n^2) 和 O(n)
給定兩個陣列,編寫一個函式來計算它們的交集。 示例 1: 輸入: nums1 = [1,2,2,1], nums2 = [2,2] 輸出: [2] 示例 2: 輸入: nums1 = [4,9,5], nums2 = [9,4,9,8,4] 輸出: [9,4] 說明: 輸出結果中的每個元素一
西南交通大學計算機專業考研真題答案詳解11:2007年演算法設計題
更多西南交通大學真題,參考:西南交通大學計算機考研——資料結構真題系列 一、考研真題 3、從鍵盤輸入任意一個大於等於2的自然數m,將m寫成所有素因子乘積的形式,例如, 若輸入:13,則你的輸出應該: 13=13
2018年 秋 網路題目詳解
判斷題 一般情況下,一個城市範圍網的網路應該屬於WAN 錯誤 都會網路 MAN 廣域網 WAN 區域網 LAN 對於傳統的10Mbit/s的共享式乙太網,如果要提高頻寬,最方便的方法是升級到ATM 錯誤
a中static關鍵字詳解。
由於學習需要找了半天找到了這篇文章,發現作者寫的很不錯,就轉載給大家: static表示“全域性”或者“靜態”的意思,用來修飾成員變數和成員方法,也可以形成靜態static程式碼塊,但是Java語言中沒有全域性變數的概念。 &n
每日一題:詳解面向物件
面向物件與面向過程 最初,軟體開發所使用的思想都是面向過程,面向過程的模式更適合計算機運算,或者說更貼近於人類大腦的理解模式。然而隨著時代的發展,軟體系統也越來越複雜,規模越來越大,面向過程的弊端逐漸顯現出來,最關鍵的在於面向過程開發出的軟體系統更難維護,程式碼耦合度較高,當需求變更後,每次都需要修改大量的程
LeetCode題目詳解
1.兩數之和 給定一個整數陣列和一個目標值,找出陣列中和為目標值的兩個數。 你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。 示例: 給定 nums = [2, 7, 11, 15], target = 9 因為 nums[0] + nums[1] =
LeetCode題目詳解-7反轉整數
7.反轉整數 題目: 給定一個 32 位有符號整數,將整數中的數字進行反轉。 示例 1: 輸入: 123 輸出: 321 示例 2: 輸入: -123 輸出: -321 示例 3: 輸入: 120 輸出: 21 注意: 假設我們的環境只能儲存 32
LeetCode題目詳解-9 迴文數
9.迴文數 題目: 判斷一個整數是否是迴文數。迴文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數。 示例 1: 輸入: 121 輸出: true 示例 2: 輸入: -121 輸出: false 解釋: 從左向右讀, 為 -121 。 從右向左讀, 為
LeetCode題目詳解-27.移除元素
27.移除元素 問題: 給定一個數組 nums 和一個值 val,你需要原地移除所有數值等於 val 的元素,返回移除後陣列的新長度。 不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 O(1) 額外空間的條件下完成。 元素的順序可以改變。你不需要考慮陣列中超
JS程式設計小題目詳解(接上一篇)
一、題目: 編寫一個網頁檔案,使用一個表單讓使用者填寫購貨訂單。填寫的資訊包括姓名、電話、商品名稱、單價、數量和金額。當提交表單時,要求: (1)商品名稱和單價只能讓使用者選擇; (2)數量為0時不予提交; (3)金額在提交時自動計算,並與所填的"金額"比較; (4
編碼器的分類,及編碼器A\B\Z三相詳解
編碼器按照讀出方式編碼器可以分為接觸式和非接觸式兩種;按照工作原理編碼器可分為增量式和絕對式兩類。增量式編碼器是將位移轉換成周期性的電訊號,再把這個電訊號轉變成計數脈衝,用脈衝的個數表示位移的大小。絕對值編碼器的每一個位置對應一個確定的數字碼,因此它的示值只與測量的起始和終止位置有關,而與測量的中間
計算機網路學習筆記——第三章課後題答案詳解
1、假定站點A和B在同一個10Mb/s乙太網網段上。這兩個站點之間的傳播時延為225位元時間。現假定A開始傳送一幀,並且在A傳送結束之前B也傳送一幀。如果A傳送的是乙太網所容許的最短的幀,那麼A在檢測到和B發生碰撞之前能否把自己的資料傳送完畢?換言之,如果A在傳送完畢之前並沒有檢測到碰撞,那麼能否肯定A所傳送
Promise.then(a, b)與Promise.then(a).catch(b)問題詳解
原文: When is .then(success, fail) considered an antipattern for promises? 問題 我在bluebrid promise FAQ上面看到, 在那裡講到.then(sucess, fail)是一個antipattern. 我不能理
NOIP 2018普及組複賽第1題答案詳解
一、C程式 ###解法一:用gets()函式 #include <stdio.h> #include <string.h> int main() { // 將控制檯的
中山大學演算法課程題目詳解(第四周)
There are a total of n courses you have to take, labeled from 0 to n - 1. Some courses may have prerequisites, for example to take course 0 you have to