U5398 改数(num)
生活随笔
收集整理的這篇文章主要介紹了
U5398 改数(num)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
U5398 改數(shù)(num)
-
- 5通過
- 28提交
- 題目提供者52zyz
- 標簽
- 難度尚無評定
?提交??
最新討論
- 暫時沒有討論
題目背景
又是一年NOIP,科學館的五樓:“我們看下這道題,我們來模擬一下…2,3,5,7,12…這其實就是一個a[i+1]-a[i]=i的序列……”那熟悉的凌波教鞭,熟悉的憨厚的聲音,那熟悉的...哦,還有那熟悉的來自未來某位神牛的發(fā)言:“老師,好像有個數(shù)寫錯了……”
題目描述
給出一個長度為n的整數(shù)序列a,你能改動最少的數(shù),使之滿足a[i+1]-a[i]=i(1<=i<n)么?
輸入輸出格式
輸入格式:?
輸入第一行包含一個整數(shù)n
第二行包含n個整數(shù),分別表示a[1]到a[n]。
?
輸出格式:?
輸出一個整數(shù),表示最少改多少個數(shù)。
?
輸入輸出樣例
輸入樣例#1:5 1 2 4 5 11 輸出樣例#1:
1
說明
對于30%的數(shù)據(jù)N<=1000
對于100%的數(shù)據(jù)1<=N<=100000
輸入的其他數(shù)據(jù)的絕對值均小于等于109
AC代碼+題解:
/* 一種想法是可以枚舉每一個數(shù),將它固定,然后根據(jù)固定的數(shù)求出別的數(shù),更新答案;這樣是O(n^2)的; 根據(jù)這個理論,可以將每一個數(shù)固定,然后直接求出a1,看那個a1相同的次數(shù)最多,那個就是答案。 */ #include<cstdio> #include<algorithm> #include<iostream> #define N 100010 using namespace std; int a[N],num[N],zh1[N],n; int main(){scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&a[i]);num[i]=num[i-1]+i-1;zh1[i]=a[i]-num[i];}sort(zh1+1,zh1+n+1);int tot=0,p=1,ans;for(int i=2;i<=n;i++){if(zh1[i]!=zh1[i-1]){if(p>tot)tot=p,ans=zh1[i-1];p=1;}else p++;}if(p>tot) ans=zh1[n];tot=0;for(int i=1;i<=n;i++) if(a[i]!=ans+num[i])tot++;printf("%d",tot);return 0; }?
轉(zhuǎn)載于:https://www.cnblogs.com/shenben/p/5967878.html
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的U5398 改数(num)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: first-child和first-of
- 下一篇: window.open与window.l