【EOJ】莫干山奇遇
阿新 • • 發佈:2019-02-08
莫干山奇遇
出題人當然是希望出的題目有關 oxx,於是想方設法給題目配上一些有關 oxx 的背景故事,使得它看起來不那麼無趣。但有的時候卻無法引入合適的小姐姐,使得 oxx 顯得非常可憐。所以出題人刪除了故事,只留下一個枯燥乏味的數學問題。
【故事已刪除】
給一個長度為 n 的序列 a1,a2,…,an,求一個長度為 m 的序列 b1,b2,…,bm 使得:
a1,a2,…,an 是 b1,b2,…,bm 的子序列(不一定連續),且
存在常數 p>0 使得 b1,b2,…,bm 是一個 p-莫干山序列。
序列 s1,s2,…,sn 是 p-莫干山序列,當且僅當:存在 0≤x<p 對於
si=(x+i)mod p。
求 m 的最小值。
Input
第一行一個整數 n (1≤n≤2⋅105)。
第二行 n 個整數用空格隔開 a1,a2,…,an (0≤ai≤1e9)。
Output
輸出最小的 m。
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=2e5+100; ll n,a[N],ans=0,p=-1; int main() { scanf("%lld",&n); for(int i=0;i<n;i++){ scanf("%lld",&a[i]); p=max(p,a[i]); } p++; ans=1; ll pre=a[0]; for(int i=1;i<n;i++){ if(pre<a[i]){ ans+=(a[i]-pre); }else{ ans+=(p-pre+a[i]); } pre=a[i]; } //ans+=n; printf("%lld\n",ans); return 0; }