1. 程式人生 > >問題A.簽到題 題目詳解

問題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