Noip 備戰篇(二)

2021-07-05 09:23:59 字數 3004 閱讀 5990

題目:

【 beads】 new oj 1585:

題目大意: 現在給你乙個數字的序列,現在你可以把他分成每段k長度的若干段,最後一段不足k的捨棄,求最多能得到多少相同的序列?(1,2,3和3,2,1是一樣的。)(n<=200005);

思路可以列舉每個k,然後把所有的串進行乙個hash,這樣的話就可以直接把每乙個k得出的所有的hash值放到乙個陣列裡面去重一下就可以了。

tips : (1<=k<=n)sigma(n/k)可以證明複雜度是nlong(n)。

這樣就可以寫程式了。

#include

#include

#include

#include

#include

#include

#include

#define seed 19990213

#define f(i,begin,end) for(int i=begin;i<=end;i++)

using

namespace

std;

const

int imax=200005+229;

typedef

unsigned

long

long us;

int n; int a[imax];

int k;

int ans[imax],num;

us f[imax],d[imax],ff[imax],lishi[imax];

int get(int x)

sort(lishi+1,lishi+s+1);

int gay=unique(lishi+1,lishi+s+1)-(lishi+1);

return gay;

}void iwork()

for(int i=n;i>=1;i--) ff[i]=ff[i+1]*seed+a[i];

for(int i=1;i<=n;i++)

printf("%d %d\n",k,num);

for(int i=1;iprintf("%d ",ans[i]);

printf("%d",ans[num]);

}int main()

【intelligence】 new oj 1588:

題目大意:霸中智力測試機構的一項工作就是按照一定的規則刪除乙個序列的數字,得到乙個確定的數列。

lyx很渴望成為霸中智力測試機構的主管,但是他在這個工作上做的並不好,俗話說熟能生巧,

他打算做很多練習,所以他希望你寫乙個程式來快速判斷他的答案是否正確。

原序列長度為m, 查詢次數為n, 每次查詢的長度小於m。

(1<=n,m<=1000000)

思路對於乙個查詢的串,首先前面的數字肯定要越小越好,這樣後面才有更多的可能性。所以直接開m個不定陣列來儲存某個數字出現的所有時刻。這樣每次都只要二分查詢即可。

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

const int imax=1000000+229;

int n,m,t;

int a[imax],now[imax];

vector q[imax];

void iread()

scanf("%d",&t);

} int find(int k,int

x) return ans;

}void iwork()

last=pos;

}flag==0 ? puts("tak") : puts("nie");

} }int main()

【pilots(pilots)】 new oj 1589:

題目大意:tz又耍畸形了!!他要當飛行員,他拿到了乙個飛行員測試難度序列,他設定了乙個難度差的最大值,在序列中他想找到乙個最長的子串,任意兩個難度差不會超過他設定的最大值。

思路顯然只要儲存兩個個單調的佇列,乙個儲存最大值乙個儲存最小值就可以。考場上想複雜了。

#include

#include

#include

#include

#include

#include

#include

#define f(i,begin,end) for(int i=begin;i<=end;i++)

using

namespace

std;

const

int imax=3000000+229;

int n,k;

int a[imax];

int max[imax],min[imax];

int maxp[imax],minp[imax];

void iread()

void iwork()

int len=0;

if(r==n)

len=max(r-l,len);

while(r<=n)

len=max(len,r-l);

while(max[bhead]-min[shead]<=k && rwhile(a[r]>max[btail-1] && btail>bhead) btail--;

max[btail]=a[r]; maxp[btail]=r; btail++;

while(a[r]1] && stail>shead) stail--;

min[stail]=a[r]; minp[stail]=r; stail++;

}if(r==n)

else len=max(len,r-l);

}printf("%d\n",len);

}int main()

Noip 備戰篇(三)

小k 的農場 farm new oj 1750 題目大意 現在有若干個農場,每個農場裡面有若干個作物,現在給你一些限制條件,具體是 思路 比較顯然的查分約束系統。對於這張圖裡面的每乙個聯通塊,只要判斷一下有沒有負環就可以了。但是有個坑爹的地方就是如果你spfa n 才退出就會超時,所以用棧代替佇列就...

2018 NOIP備戰計畫

2018 noip目標 1 刷完紫書數論習題 2 聽51nod講座和習題,根據其知識結構來備戰。3 刷完紫書動規 4 初賽前兩個星期左右開始複習 刷紫書動規的時候感覺偏難,進步緩慢。應該自己調低難度 兩個大任務 1 51nod講座 2 按照 演算法競賽高階指南 中動規的分類來刷 線性動規,狀壓動規,...

藍橋杯備戰 遞迴篇

持續更新 二 李白喝酒 三 六角填數 小明剛剛看完電影 第39級台階 離開電影院的時候,他數了數禮堂前的台階數,恰好是39級 站在台階前,他突然又想著乙個問題 如果我每一步只能邁上1個或2個台階。先邁左腳,然後左右交替,最後一步是邁右腳,也就是說一共要走偶數步。那麼,上完39級台階,有多少種不同的上...