蒜廠年會|計蒜客2019藍橋杯省賽 B 組模擬賽(一)
阿新 • • 發佈:2019-02-01
int com 搬運 end for ima urn 省賽 stream
思路一:環形數組拆分成普通數組(通過搬運復制數據到尾部),再求前綴和,找出最大前綴和。因為枚舉了每一個起點 所以最大連續和也一定出現在前綴和中!
思路二:
代碼一:暴力,枚舉數組的起點,環形數組通過把0~起點這段數據搬運到尾部,形成新的數組。再對新數組球前綴和,找出最大的前綴和即可。
#include<iostream> using namespace std; int n; long long arr[20010]; long long s[20010]; int main(){ cin>>n; for(int i=1;i<=n;i++){ cin>>arr[i]; } int maxtt = -1; int i; for(i = 1;i<=n;i++){ //搬運數據 for(int j=1;j<i;j++){ arr[n+j] = arr[j]; } int len = n + i; //求出最大的連續和(前綴和) s[i-1] = 0; for(int p = i;p<=len;p++){ s[p] = s[p-1] + arr[p]; if(s[p] > maxtt) maxtt = s[p]; } } cout<<maxtt<<endl; return 0; }
蒜廠年會|計蒜客2019藍橋杯省賽 B 組模擬賽(一)