題解 P1420 【最長連號】
阿新 • • 發佈:2018-03-21
行處理 span -s bits pre c++ cpp 整數 然而
本蒟蒻共發兩篇題解都以同樣的理由被拒絕了>_<
所以,在仔細閱讀了其他同學寫的題解後決定認真寫一道簡單一點的題目的題解
我發現好像很多同學都想得太復雜了
這道題n<=10000,明明o(n)可以跑過,為什麽這麽復雜呢
首先,暫時不用遞歸,可能會有些難以理解
#include<bits/stdc++.h> //神奇頭文件不用解釋
#define INF 10234567
using namespace std; //額……@_@
int main() //不用遞歸
{
int n,s[1001 ],ans=0,max=-INF; //n表示輸入有n個正整數,ans呢待會解釋,max可以不用想了,一定是最後的答案,為什麽被賦值為-INF下面解釋
cin>>n; //輸入n
for(int i=1;i<=n;i++) //循環了n次
cin>>s[i]; //將數存進s數組裏,其實也可以不存,這樣會更好理解
for (int i=1;i<=n;i++) //仍舊循環n次,對n個數進行處理
{ //以下以樣例為例來解釋代碼:10\n3 5 6 2 3 4 5 6 8 9
if(s[i+1]-s[i]==1)ans++; //i從1到n,當i=1時s[i+1]表示3後面一個數,即為5,如果5-3==1,就說明3,5是連號,這裏顯然不是。如果是就將ans++,所以這裏的ans只是為了臨時存一下連號的個數,以此類推。
else ans=0; //一旦發現了一次不連號,就將臨時存儲的數據變為0
if(ans>max)max=ans; //將max賦為-INF的原因是為了找到ans中的最大值,達到題目目的
}
cout<<++max; //最後輸出最大值
}
好吧,我承認這到比較簡單的題目可以有很多解法,然而像我的這種解法的已經有很多了。
我旨在為了和我一樣剛入門oi的同學一起分享學習思路,一些想法。
ps:理解萬歲,這種簡單題目,配上如此詳細的解釋應該可以理解吧。^_^
題解 P1420 【最長連號】