雙指標掃一遍
#include#include#include#includeusing namespace std;output#define rep(i,s,t) for(int i=s;i<=t;i++)
#define dwn(i,s,t) for(int i=s;i>=t;i--)
#define clr(x,c) memset(x,c,sizeof(x))
#define ll long long
int read()
char sh[15];
void print(int x)
const int nmax=1e7+5;
bool a[nmax];
int main(){
int n=read(),k=read(),t=read(),a0=read(),b=read(),c=read(),p=read();
rep(i,1,n) if((a0=((ll)a0*b+c)%p)>=t) a[i]=1;
int l=0,r=0,cnt=0;ll ans=0;
while(1){
if(a[l]) --cnt;++l;
while(cnt1495 中國好區間
基準時間限制:0.7 秒 空間限制:131072 kb 分值: 80 難度:5級演算法題
收藏關注阿爾法在玩乙個遊戲,阿爾法給出了乙個長度為n的序列,他認為,一段好的區間,它的長度是》=k的,且該區間的第k大的那個數,一定大於等於t。那麼問題來了,阿爾法想知道有多少好的區間。
由於阿爾法的序列長度實在是太大了,無法在規定時間內讀入。
他想了乙個絕妙的方法。
讀入a[0],b,c,p,則a[i]=(a[i-1]*b+c)mod p。
樣例解釋:
a1~a5分別為47,135,247,35,147
對應的7個區間分別為[1,3],[2,3],[1,4],[2,4],[1,5],[2,5],[3,5]
對於重複的數字1,2,2 第一大是2,第二大也是2,第三大是1。
input
讀入一行,7個數字,表示n(n<=10000000),k(k<=n),t,a[0],b,c,p。
所有數字均為正整數且小於等於10^9。
輸出一行表示好區間的個數。input示例
5 2 100 10 124 7 300output示例
7
51Nod 1495 中國好區間
acm模版 這個題真的很讓人出乎意料 沒成想,1e7的資料醬紫搞竟然能在0.7s內搞定。首先,我們暴力獲得陣列 a 然後使用尺取法,先獲取乙個滿足題意的 l 1,r cn t k 的區間,接著呢,很明顯只要右區間大於 r 都是好區間,然後尺取法往後繼續查詢剛好滿足 l r cn t k的區間,累計好...
51nod 1495 中國好區間
這道題給我說了尺取法我也不會,沒辦法只能看別人的部落格 感覺弄得好巧妙啊 首先,條件是選取的長度大於等於 k k 這個好理解,就他的兩個指標 r l 1 k role presentation r l 1 kr l 1 k就行了。但是要求從大到小第 k k 大的數要大於 t role present...
51nod1495 中國好區間 思維
題目大意 阿爾法在玩乙個遊戲,阿爾法給出了乙個長度為n的序列,他認為,一段好的區間,它的長度是 k的,且該區間的第k大的那個數,一定大於等於t。那麼問題來了,阿爾法想知道有多少好的區間。由於阿爾法的序列長度實在是太大了,無法在規定時間內讀入。他想了乙個絕妙的方法。讀入a 0 b,c,p,則a i a...