考試反思 0316省選模擬47 偏頗

2022-02-03 01:48:07 字數 3202 閱讀 8075

這套題的考察思路其實不錯。

三暴力,掛乙個。

$t1$是送分,但是一眼覺得是大資料結構,於是直接扔掉了。

結果竟然是個原題。。。$dy$講的只記住了只言片語思路早就忘了。。。

好歹這次會了。

$t2$的話寫了個亂搞,結果把本來到手的$20$給寫死迴圈了,加了句判斷就$50$了。

$t3$差不多想到正解了,但是毒瘤出題人不給部分分於是我就白想了那麼多拿了個暴力分走了。

為什麼不給部分分啊啊啊啊啊只留下了$20$和正解完全沒關係。

鬼知道他怎麼想的。。。

t1:老夫

大意:有$n$人有引數$a_i,b_i$,若$c \le b_i$則帶來$cw$收益,否則若$p \le a_i$則帶來$p$收益。對$c=[1,max(b)+1]$的每個值時求最大收益。$n,a_i,b_i \le 10^5$

把人排序後發現每次加入人就是區間加等差數列。

分塊,區間加懶標記,維護單調佇列(凸包)單調指標掃它就行了。

時間複雜度$o(n \sqrt)$

1 #include2

using

namespace

std;

3#define s 100605

4struct ps}p[s];

5int n,w,mxb,t[11111],pt[11111],c[11111],q[11111][166];long

long

ans,mx,v[s];

6long

long cal(int z,int o)

7int

main()

21int z=x/100;22

for(int i=z*100;i<=x;++i)v[i]+=i;

23for(int i=z*100;i100+100;++i)v[i]+=1ll*t[z]*i,mx=max(mx,v[i]);

24 t[z]=c[z]=0;pt[z]=1;25

for(int i=z*100;i100+100;++i)

30 ans-=1ll*p[ptr].b*w;ptr++;

31 }ans+=(n-ptr+1ll)*w; printf("

%lld

",ans+mx);32}

33 }

view code

t2:打算

大意:構造乙個迴圈節長度為$l$的$uldr$序列。滿足$n$條限制形如$t_i$時刻在位置$(x_i,y_i)$。$n \le 10^5,l \le 10^6$

首先麻煩的是二維座標互相影響,如何解決?

很久之前就驚了一次的:旋轉座標系。這樣之後每一步橫縱座標都要$+1/-1$,然後每一對$(+1/-1)(+1/-1)$都能恰好確定原座標系中的乙個方向。

問題轉化成:每一步$+1$或$-1$.有若干限制形如在時刻t你要在位置$x$上.兩維分別計算最後合併即可。

然後我們對於每一條限制拆成整迴圈節部分以及零散部分。然後列出若干等式之後可以得到乙個整迴圈節位移的可行區間。

取乙個合法值然後模擬構造方案即可。

1 #include2

using

namespace

std;

3#define s 2222222

4#define fail

5int n,l;long

long

x[s],y[s],t[s];

6struct ps}p[s];

7void solve(long

long*a);

10 p[n+1]=(ps); sort(p+1,p+1+n);

11for(int i=1;i<=n+1;++i)if(l+l&1)l++;if(r+l&1)r--;if(l>r)fail;

18for(int i=1;i<=n+1;++i)25}

26int

main()solve(x);solve(y);

33for(int i=0;i'

r':'

u'):(y[i]?'

d':'l'

));34 }

view code

t3:報復社會

大意:問長度為$n$字符集大小為$3$的滿足所有子串中任意兩種字元出現次數差不超過$k$的字串數。$n \le 10^18,k \le 5$

老思路,我們差分,那麼設$f(a)$表示$a$的出現次數,我們的狀態只與$f(a)-f(b),f(b)-f(c),f(a)-f(c)$有關。

發現只要過程中$f(a)-f(b)$的波動範圍不超過$k$即可。於是我們列舉其波動範圍的左端點$l1,l2,l3$。$o((k+1)^3)$

轉移採用矩陣快速冪。我們只記錄其中兩個狀態就知道了第三個狀態,根據你列舉的區間左端點判一下是否合法即可。這複雜度是$o((k+1)^6logn)$

總複雜度是$o((k+1)^9logn)$

1 #include2

using

namespace

std;

3#define mod 998244353

4#define cl(s) memset(s,0,sizeof s)

5long

long n,c[66][66];int k,ans,o[7][7],oc,b[66][66],a[66];6

void

mulb()

10void

mula()

14int solve(int l1,int u1,int l2,int u2,int l3,int

u3)23

for(long

long i=1;i<=n;i<<=1,mulb())if(n&i)mula();

24int s=0;for(int i=1;i<=oc;++i)s=(s+a[i])%mod;return

s;25}26

intmain()

view code

然後可以發現,當$l1+l2-l3$的值相同時,轉移矩陣是完全相同的,只有初值不一樣。

所以記錄下來每次直接用,複雜度是$o((k+1)^7logn)$的。

省選模擬47

考慮按照 c 遞增的順序查詢答案,那麼發現需要進行的操作是區間加下標,全域性最值。直接上分塊凸包就行了。考慮將座標 x,y 轉化成 x y,x y 這樣就將兩維獨立了出來。對於每一維分別考慮,那麼每乙個限制都可以被表達成 a l b x i 的形式,x i 表示 i 時刻的座標,l 表示乙個週期的位...

考試反思 0502省選模擬86 恐懼

還是狀態持續不佳。但是今天沒那麼困,雖說腦子還是不想動。一看到原題就慫,毛病。好像考場上遇到原題的話,得分會比非原題還低。t2 作為原題就直接放棄正解了 然後乖乖的打部分分,結果教練把子任務放錯了於是丟了 15pts 放錯子任務同時也導致 直接輸出 0 能多 20 分。啊人就應該有信仰啊為什麼我沒輸...

考試反思 0313省選模擬44 習慣

我也不知道我在幹什麼了。僥倖還是害人啊。t1 乙個變數名的大小寫寫錯了 shift沒按住 然後就爆零了,丟了 45 分。然後 oj 貌似終於支援靜態記憶體了?不知道反正我就謎之 mle 了,我根本都沒用那東西。然後開小點就有 35 分了。85 分的場打成 5 分。哎。話說這套題好噁心啊,部分分很少且...