毒瘤大合集。
$t1$基本沒有暴力分但是正解是兩個暴力的合集。。然後單純只寫其中比較簡單的那乙個的話一分都沒有。。
$t2$寫的暴力正解不知道是啥東西。但是我陣列開i太大,本機沒事但交上去$ce$了。(把我根本沒呼叫過的杜教篩雜湊表給刪了就不$ce$了)
然而也只有$10$分。常數醜了。把所有陣列都縮小到$\frac$就有$20$分了。奇奇怪怪。
$t3$是個毒瘤卡常的互動題,複雜度明明是$o(n \ log \ n)$但是因為所謂實測非得卡到$o(10n)$.
然而我並沒有什麼想法,畢竟只會寫$o(n^2)$的,正解優化的思路還是不錯。但是因為毒瘤卡常所以還是耽誤了我一下午的時間。
不知道為什麼並沒有留更多的改題時間,所以苟過$t3$然後把$t1$的高分暴力寫了就結束了。
t1:任憑風浪起,穩坐釣魚台
大意:給$n$個$k$位二進位制數,求兩兩異或的立方和。$nk \le 2 \times 10^6$
對於$k \geq 128$直接暴力,手寫$bitset$壓位,$2^$進製效果不錯。
對於$k<128$,逐位考慮貢獻。發現立方就是可重複的選擇三位,如果這三位在兩個數中異或值都為$1$那麼就產生這三位的乘積的貢獻。
於是用$bitset$壓一壓有哪些數這一位上是1哪些數是0,然後與一與就好了。
1 #include280pts。卡常using
namespace
std;
3#define ull unsigned long long
4#define mod 998244353
5 unsigned int seed;int n,k,x,ans,bit[1
<<16];ull jz=((1ull<<63)%mod<<1)%mod,pw[555
];6 vectorb[20005],r,c[20005];7
ull get01()
13int cnt(ull s)
14int
main()cout
26 }const
int n=n-1>>6; r.resize(n+1
);27
for(int i=0;i1),c[i].resize(n+1
);28
for(int i=0;ifor(int j=0;j>6]|=get01()<>6]|=b[j][i>>6]&(1ull<
));29 pw[0]=1;30
for(int i=1;i<555;++i)pw[i]=(pw[i-1]+pw[i-1])%mod;
31for(int i=1;i<1
<<16;++i)bit[i]=bit[i>>1]+(i&1
);32
for(int i=0;ifor(int j=i;jfor(int x=j;xx)cout
46 }
對於異或這種操作,上面我們是列舉了每一位的$01$。然而為什麼不能直接去做異或呢?
發現這道題貌似可以直接對若干位異或$fwt$。
我們把二進位制位每$a$位分為一組,然後我們要從中選出三個數字的話,那麼只需要選出三個數字分別在哪一組裡。
t2:任憑風浪起,穩坐釣魚台(續)
鴿了鴿了等$skyh$大神講了。
t3:魚和熊掌不可兼得
大意:互動。實現乙個函式猜中乙個$n$排列。可以呼叫乙個函式,返回排列中對位正確的有多少個。$n \le 5000,limit \le 10n$
首先為了方便隨機出乙個錯排。
然後交換關係相當與$\frac$條邊。
因為已經是錯排了,所以交換的結果只會使正確數增加,那麼這條邊就使至少乙個數字歸位了。
把所有這樣有用的邊都記下來,那麼整個序列就被分成了若干環。
現在問題是如何在合法查詢次數內知道哪條邊是否有用。
發現只要沒有公共點,那麼邊之間是互不影響的。
那麼我們就可以指定乙個沒有公共點的邊集同時交換它們然後進行$count$。如果有數就證明這組邊裡至少有一條有用的。
然後遞迴分治下去就能找到哪些邊是有用的。
所以現在的問題是如何把$\frac)$條邊分成盡量少的組使之沒有公共點。
發現邊兩端點的編號和對$n$取模就是乙個合理的組編號。
因為如果有公共點那麼相當於乙個數就一定鎖定了。為了讓模後相等在同乙個組內,那麼另乙個數也要相等,那就是重邊了。。。
所以如此分組然後分治,最後$dfs$弄環就可以了。
然而有幾個小細節用來卡常,畢竟這題應該是$o(nlogn)$的且附帶一些不小的常數,然而卡成$10n$也就非常無良了。
首先對於乙個點如果它的有用邊度數已經達到了2那麼以後關於這個點的邊就不必加入分治了。
其次分治時傳乙個引數是這裡面所有邊對$count$的總貢獻。然後查詢左兒子時,右兒子的值也就可以直接做差得到了。
再之最後$dfs$的複雜度應該是環數級別的,而不能是點數級別的。
然後就大概在最後乙個子任務$49199$過去了。無良出題人。。
1 #include"view codegame.h"2
using
namespace
std;
3#define s 5555
4int x[5555],y[5555],c,mt[5555],e[5555][3],al[5555],c,top;vectora,r;
5void cl(int l,int r)
6void dac(int l,int r,int
zz)11 cl(l,l+r>>1);int $=count(a);cl(l,l+r>>1);if($)dac(l,l+r>>1
,$);
12if($!=zz)dac((l+r>>1)+1,r,zz-$);13}
14void dfs(int p,int nt=1
)18 vectorguess(int n,int
l)26}27
for(int i=0,lc=0;iif(!al[i])
32for(int j=0;jtop;
33 al[i]=2;swap(a[i],a[e[i][2]]);dfs(e[i][2],2
);34 }return
a;35 }
考試反思 0502省選模擬86 恐懼
還是狀態持續不佳。但是今天沒那麼困,雖說腦子還是不想動。一看到原題就慫,毛病。好像考場上遇到原題的話,得分會比非原題還低。t2 作為原題就直接放棄正解了 然後乖乖的打部分分,結果教練把子任務放錯了於是丟了 15pts 放錯子任務同時也導致 直接輸出 0 能多 20 分。啊人就應該有信仰啊為什麼我沒輸...
考試反思 0316省選模擬47 偏頗
這套題的考察思路其實不錯。三暴力,掛乙個。t1 是送分,但是一眼覺得是大資料結構,於是直接扔掉了。結果竟然是個原題。dy 講的只記住了只言片語思路早就忘了。好歹這次會了。t2 的話寫了個亂搞,結果把本來到手的 20 給寫死迴圈了,加了句判斷就 50 了。t3 差不多想到正解了,但是毒瘤出題人不給部分...
考試反思 0313省選模擬44 習慣
我也不知道我在幹什麼了。僥倖還是害人啊。t1 乙個變數名的大小寫寫錯了 shift沒按住 然後就爆零了,丟了 45 分。然後 oj 貌似終於支援靜態記憶體了?不知道反正我就謎之 mle 了,我根本都沒用那東西。然後開小點就有 35 分了。85 分的場打成 5 分。哎。話說這套題好噁心啊,部分分很少且...