題意:給定乙個數列,求是否存在連續子列和為m的倍數,存在輸出yes,否則輸出no。
題解:預處理字首和,一旦有兩個數模m的值相同,說明中間一部分連續子列可以組成m的倍數。為什麼?假設sum[1,i]%m=k,sum[1,j]%m=k,則sum[i+1,j]%m=0。
由鴿巢原理,可以知道一旦n>m,則必定會有某兩個字首和對m取模相等。
複雜度o(n).
**:
#include#include#include#includeusing namespace std;
const int max=100000+10;
int a[max],sum[max];
int vis[max];
int main()
int flag=0;
if(vis[0]) flag=1;
else }}
printf("%s\n",flag?"yes":"no");
}return 0;
}
Bound Found(尺取 字首和)
題目大意 就是給n個有正有負的整數,然後給k個t,在n數列中找到連續的乙個序列使得這個序列的和的絕對值最接近t,然後輸出這個序列的和的絕對值和它的區間左右端點。思路 這是個尺取的問題,首先這是我第一道尺取題,不知道為什麼第一道就不容易找單調出序列,不知道掛題的學長怎麼想的,雖然當時講了一小下這種問題...
字首和 取餘 k倍區間
問題描述 給定乙個長度為n的數列,a1,a2,an,如果其中一段連續的子串行ai,ai 1,aj i j 之和是k的倍數,我們就稱這個區間 i,j 是k倍區間。你能求出數列中總共有多少個k倍區間嗎?輸入格式 第一行包含兩個整數n和k。1 n,k 100000 以下n行每行包含乙個整數ai。1 ai ...
數學考試 字首和(尺取)
今天qwb要參加乙個數學考試,這套試卷一共有n道題,每道題qwb能獲得的分數為ai,qwb並不打算把這些題全做完,他想選總共2k道題來做,並且期望他能獲得的分數盡可能的大,他準備選2個不連續的長度為k的區間,即 l,l 1,l 2,l k 1 r,r 1,r 2,r k 1 r l k 第一行乙個整...