然而今天沒有第二張圖。 因為我並沒有上榜。。。
離考試結束還有$10$分鐘左右的時候開始嘗試提交,然後斷網了。
然後連了$10$分鐘沒連上,然後就硬核爆零了。
如果交上去的話,打的都打滿了,$24+27+40=91$.是$rk9$
好不到**去。。反正是被這個網嚴重影響了心情。
$t1$大概想到了正解思路但是中途網斷了,重連時候就沒有按照原來的思路想下去。
$t2$一眼發現大概是原題,於是開始想,大概有印象但是具體內容忘掉了,所以打了暴力就走了。
$t3$想到了正解的一部分,但是因為時間不夠以及網路問題沒有繼續深究,拿著比較豐厚的$40$暴力就走了。
然後這麼簡單的一次考試我就爆零了。。。
其實今天狀態也不太好,有一點頭暈&困。然後下午就集中爆發了。
大概在晚上恢復了狀態,壓著時間把三道題都改出來了(得虧題目簡單。。。)
話說仨題兩個字首和乙個差分,出題人想表達什麼。。?
t1:inverse
大意:排列,$k$次操作等概率翻轉乙個區間。求最終逆序對數的期望。$n \le 500,k \le 50$
我轉化成方案數來統計了,一樣的。
設$dp_$表示$i$輪後$p_j > p_k$的方案數。列舉翻轉區間暴力來複雜度是$o(kn^4)$的
然後我們分情況討論,討論翻轉的區間包含了哪個端點,4種情況,每種的轉移點數量都是不超過$o(n)$的,所以複雜度是$o(kn^3)$
然後我們把轉移式子繼續化簡,發現可以使用字首和優化,還是二維的,所以多弄幾個行,列,斜線的字首和優化,時間複雜度就是$o(kn^2)$的了
1 #include2view codeusing
namespace
std;
3#define mod 1000000007
4#define cl(s) memset(s,0,sizeof s)
5int qp(int b,int t,int a=1)
6int mo(int a)
7int px(int x)
8int n,k,p[555],dp[501][501],ans,s1[505][505],s2[505][505],s3[505][505],s4[505][505],s5[505][505],s6[505][505];9
intmain()
26for(int i=1;i<=n;++i)for(int j=i+1;j<=n;++j)ans=mo(ans+dp[i][j]);
27 printf("
%lld\n
",1ll*ans*qp(qp(px(n),k),mod-2)%mod);
28 }
t2:subsequence
大意:數列$a$,對於所有長度$k \in [1,n]$求乙個長為$k$的子串行$b$,最大化$\sum\limits_^ i \times b_i$。$n \le 100000$
原題鏈結
。不一樣的地方在於這次必須是子串行,不能亂序。所以把排序去掉就好了。
還是決策單調性,平衡樹維護差分$dp$陣列,依次插入每個數,然後是區間加之類的。
1 #include2view codeusing
namespace
std;
3#define s 123456
4int n,c[2][s],f[s],sz[s],s[s],rt,pc;long
long
ans,lz[s],w[s],a[s];
5#define lc c[0][p]
6#define rc c[1][p]
7void up(int p)
8void down(int p)
9void spin(int
p)14
void splay(int
p)18
void insert(int
p)25 p=pc; c[d][f[p]=lp]=p; w[p]=a[p]*sz; splay(p);
26 w[rc]+=a[p]; lz[rc]+=a[p];27}
28void dfs(int
p)32
intmain()
t3:convex
大意:凸多邊形,求按照每條對角線劃分後兩部分面積差絕對值之和的2倍。$n \le 2 \times 10^6$
暴力的做法是列舉對角線嘛。
不那麼暴力的話我們發現我們可以只列舉乙個端點,然後我們可以找到乙個分界點,順時針方向都是對角線上方的比較大,逆時針則小。
判斷的條件是面積是否超過整個多邊形的一半。因為是凸多邊形所以隨著你列舉的點遞增分界點也遞增,單調指標就好了。
得到分界點,問題在於求出若干多邊形面積的和。
考慮多邊形面積如何計算:三角剖分。這道題裡為了讓不同的邊之間沒有關聯,我們圍繞原點進行三角剖分。
也就是說某個多邊形面積等於它在原多邊形上,直線與每對相鄰的兩點相連,得到的兩個向量的叉積。
所以問題就轉化到了相鄰的點對上。發現如果當前列舉點為$x$而分界點是$y$那麼$(0,0)-> y-1 \times (0,0) -> y$這對向量叉積累加答案一次。
$(y-2,y-1)$累加$2$次。。。$(x,x+1)$累加$y-x$次。是等差數列。所以維護字首和的字首和,加加減減就好了。
這是在原凸多邊形上相鄰的兩個點做出的貢獻,通過預處理解決了。
剩下沒有考慮的就是對角線兩點的貢獻。發現當你列舉的點確定是,另乙個點是連續的。
你大概要求乙個$\sum\limits_^ x_x y_i - y_x x_i$。很明顯的字首和形式,維護橫縱座標的字首和就好了。
既然已經得到了分界點以及一堆面積小於一半的多邊形的面積,那麼剩下的就都可以大概同理的求出來了。
然後加一些取模優化啥的不然可能被卡常。。大概是沒了。
1 #include2view codeusing
namespace
std;
3#define s 6222222
4#define mod 1000000007
5long
long s[s],s2[s],s1[s],x[s],y[s],ans,ss,x[s],y[s];intn;6
long
long cross(int a,int b)
7long
long cal(int a,int b)
8int
read()
14int mo(int a)
15int
main()printf("
%lld\n
",(ans+mod)%mod*500000004ll%mod);
29 }
考試 省選38
我t2被卡常。笑。t1 這個題和那個zjoi線段樹挺像的。利用期望的線性性,dp出每一對點成為逆序對的概率。然後加起來就是答案了。這樣直接dp是 o n 4k 的。做兩個字首和就可以做到 o n 2k 了。t2打個錶能發現決策如果在 i 可行,那麼在 i 1 也可行。證明的話考慮 選 i 個的話,選...
省選模擬38
這個題考場上打的有點噁心,導致調的時間有點長最後沒優化出來,常數還掛了,被卡成暴力分。考慮dp,令 f i j k 表示第 i 次操作小的點在j大的點在k,最終形成逆序對的方案數。暴力列舉當前選擇的區間的話複雜度是 n 4k 的,仔細看可以發現轉移到的狀態是 o n 的,所以對於每種狀態轉移就是 n...
考試反思 0502省選模擬86 恐懼
還是狀態持續不佳。但是今天沒那麼困,雖說腦子還是不想動。一看到原題就慫,毛病。好像考場上遇到原題的話,得分會比非原題還低。t2 作為原題就直接放棄正解了 然後乖乖的打部分分,結果教練把子任務放錯了於是丟了 15pts 放錯子任務同時也導致 直接輸出 0 能多 20 分。啊人就應該有信仰啊為什麼我沒輸...