日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

cometoj contest 6(记录型博客)

發布時間:2024/4/11 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 cometoj contest 6(记录型博客) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言
由于時間過少,這里僅僅記錄我自己的思路(給自己看的),如果你有興趣可以看看原題,再看看我寫的,但是一般情況下不會很友好,此類文章在以后都會標記“(記錄型博客)”

A

我們發現,所有的剩余量一定是
a+2ba+\sqrt 2 ba+2?b或者是C?(a+2b)C-(a+\sqrt 2 b)C?(a+2?b)的形式
把所有這些形式的全部抽出來
分析一下種類好像不是很多,然后建圖跑最短路即可

B

首先有個性質,就是這么生成的樹的直徑一定是小于等于O(logn)\mathcal O(logn)O(logn)
然后考慮dp
fu,lf_{u,l}fu,l?表示以uuu為根,直徑不超過ddd,距離uuu的最遠點距離不超過l的子樹最多包含的點數
轉移是對于每個fu,lf_{u,l}fu,l?,加入兒子,枚舉兒子更新到的lll,我們發現只需要l+s+1≤dl+s+1\le dl+s+1d即可,所以是一個前綴max形式,對于s+1>ls+1>ls+1>l的情況另外處理一遍即可
然后,在枚舉刪去點的數量的時候,我們只需要枚舉剩余直徑長度即可,所以要掃O(logn)\mathcal O(logn)O(logn)遍,每遍復雜度O(nlogn)\mathcal O(nlogn)O(nlogn)
綜上總復雜度O(nlog2n)\mathcal O(nlog^2n)O(nlog2n)

C

排序后直接統計相鄰兩個數相差大于m的數量即可

D

感覺是構造題?
nnn是奇數的話
123???n?1nn12???n?2n?1n?1n1???n?3n?2??????????????????234???n1\begin{matrix} 1&2&3&···&n-1&n\\ n&1&2&···&n-2&n-1\\ n-1&n&1&···&n-3&n-2\\ ···&···&···&···&···&···\\ 2&3&4&···&n&1 \end{matrix} 1nn?1???2?21n???3?321???4?????????????????n?1n?2n?3???n?nn?1n?2???1?
就好了
然后若n=4n=4n=4
1234432121433412\begin{matrix} 1&2&3&4\\ 4&3&2&1\\ 2&1&4&3\\ 3&4&1&2\\ \end{matrix} 1423?2314?3241?4132?
之后就構造了
設已經求出答案為nnn的矩陣A(n)A(n)A(n)
沿著對角線翻轉的矩陣為A′(n)A'(n)A(n)
現在要對新的nnn求答案,設n=2kn=2kn=2k
A(2k)={A(k)+kA′(k)A(k)%k+1A(k)+k}A(2k)=\left\{ \begin{matrix} A(k)+k&A'(k)\\ A(k)\%k+1&A(k)+k \end{matrix}\right\} A(2k)={A(k)+kA(k)%k+1?A(k)A(k)+k?}
由于A(k)+kA(k)+kA(k)+k本身不會不滿足對稱的性質
考慮A(k)%k+1A(k)\%k+1A(k)%k+1A′(k)A'(k)A(k),原本A(k)A(k)A(k)A′(k)A'(k)A(k)是完全對稱的,現在A(k)A(k)A(k)全部改了值,所以問題就解決了

E

建出所有免費走的地方之間的邊,跑最短路即可
復雜度O(n2log2n)\mathcal O(n^2log^2n)O(n2log2n)

F

按照權值從小到大加邊
新增點權為某個節點到當前點路徑的xor
然后建trie,加邊合并的時候啟發式在trie里查詢
總復雜度O(nlog2n)\mathcal O(nlog^2n)O(nlog2n)

G

如果沒有最后的交換操作的話直接貪心取段,然后將最多的段數與k比較即可
然后考慮有交換的情況,這就非常麻煩了
我們考慮[a1,a2][b1,b2][c1,c2][d1,d2][e1,e2][f1,f2]???[a_1,a_2][b_1,b_2][c_1,c_2][d_1,d_2][e_1,e_2][f_1,f_2]···[a1?,a2?][b1?,b2?][c1?,c2?][d1?,d2?][e1?,e2?][f1?,f2?]???的情況
假設我們要交換兩段,我們發現左段的左端點一定是某段的左端點,右段的右端點一定是某段的右端點(否則一定能分開新的段)
假設我們現在左段左端在x1x_1x1?,右段右端在y2y_2y2?
我們發現若x≠yx\neq yx?=y則交換之后一定不成立
所以x=yx=yx=y
于是我們相當于要把一段內部花一次交換的代價以分成更多段
我們發現只要確定第一段和最后一段的端點,中間的當成不能交換的問題做就好了
我們要把第一段和最后一段翻轉,所以第一段一定要包含R,最后一段一定要包含L,然后我們通過貪心把所有可以作為第一段的右端點的點都搞出來,我們發現這些點也可以成為最后一段的左端點,考慮這些分的段,如果除了第一段與最后一段剩下大于1段的,這兩段排序后將不有序,所以一定只有貪心出來的一段能繼續再分,于是我們就將每一段求出最大值取max即可
這里的段的示意圖[xk,n][xk?1,xk)???[x1,x2)[1,x1)[x_k,n][x_{k-1},x_k)···[x_1,x_2)[1,x_1)[xk?,n][xk?1?,xk?)???[x1?,x2?)[1,x1?),我們每次算一個[xi,xi+1][x_i,x_{i+1}][xi?,xi+1?]的答案就好了
,總復雜度O(n)\mathcal O(n)O(n)
下面是AC代碼
題目鏈接

#include<cstdio> #include<cctype> #include<algorithm> //#include<ctime> #define rg register typedef long long ll; template <typename T> inline T max(const T a,const T b){return a>b?a:b;} template <typename T> inline T min(const T a,const T b){return a<b?a:b;} template <typename T> inline void mind(T&a,const T b){a=a<b?a:b;} template <typename T> inline void maxd(T&a,const T b){a=a>b?a:b;} template <typename T> inline T abs(const T a){return a>0?a:-a;} template <typename T> inline void Swap(T&a,T&b){T c=a;a=b;b=c;} //template <typename T> inline void swap(T*a,T*b){T c=a;a=b;b=c;} template <typename T> inline T gcd(const T a,const T b){if(!b)return a;return gcd(b,a%b);} template <typename T> inline T lcm(const T a,const T b){return a/gcd(a,b)*b;} template <typename T> inline T square(const T x){return x*x;}; template <typename T> inline void read(T&x) {char cu=getchar();x=0;bool fla=0;while(!isdigit(cu)){if(cu=='-')fla=1;cu=getchar();}while(isdigit(cu))x=x*10+cu-'0',cu=getchar();if(fla)x=-x; } template <typename T> inline void printe(const T x) {if(x>=10)printe(x/10);putchar(x%10+'0'); } template <typename T> inline void print(const T x) {if(x<0)putchar('-'),printe(-x);else printe(x); } int n,k,a[1000001],maxplace,las=1; int ok[1000001],tot; void rt(const bool fla) {if(fla)puts("Yes");else puts("Poor Simon");exit(0); } int le,aaa[1000001]; int calc2() {int ma=0,an=0;for(int i=1;i<=le;i++){maxd(ma,aaa[i]);if(i==ma)an++;}return an; } int len,A[1000001]; int calc1() {maxplace=0;int ans=0,fst=0,la=1;for(int i=1;i<=len;i++){maxd(maxplace,A[i]);if(i==maxplace){fst++;if(fst!=1&&i!=len){le=i-la+1;for(int j=1;j<=le;j++)aaa[le-j+1]=A[la+j-1]-la+1;maxd(ans,calc2());}la=i+1;}}return ans+min(fst,2); } int check(int l,int r) {len=r-l+1;for(int i=1;i<=len;i++)A[len-i+1]=a[l+i-1]-l+1;return calc1()-1; } int main() {read(n),read(k);for(int i=1;i<=n;i++)read(a[i]);for(int i=1;i<=n;i++){maxd(maxplace,a[i]);if(i==maxplace)ok[i]=1,tot++;}if(tot>=k)rt(1);for(int i=1;i<=n;i++)if(ok[i]){if(tot+check(las,i)>=k)rt(1);las=i+1;}rt(0);return 0; }

H

我們發現只要贏的次數最多,直接貪心即可,兩行代碼足矣

I

大概是經典的FFT題目,先轉化為原根求和,變成加法問題后直接用FFT做卷積即可

J

我們發現,我們要求的是最長不上升子序列即0???01???10···01···10???01???1形式
要求所有的(sum0+sum1)sum0=sum02+sum1sum0(sum_0+sum_1)sum_0=sum_0^2+sum_1sum_0(sum0?+sum1?)sum0?=sum02?+sum1?sum0?
考慮枚舉最右邊的一個000
我們要求的是∑sum1\sum sum_1sum1?,并且要滿足這是最右邊的000,如果右邊有更多就不優
考慮dp,fi,j,gi,jf_{i,j},g_{i,j}fi,j?,gi,j?分別表示到第i個數,1的數量,方案數推完即可,復雜度O(n2)\mathcal O(n^2)O(n2)(容易發現111的數量要一直大于000的數量)
再考慮求左側的情況,要求∑sum0\sum sum_0sum0?非常方便,同理即可(不過這里容易發現000的數量要一直大于等于111的數量)
然后求∑sum02\sum sum_0^2sum02?好像也沒啥區別,貢獻的時候有個平方就好了
然后就做完了
復雜度O(n3)\mathcal O(n^3)O(n3)

K

容易發現,對于原序列,每一個左括號都有相應的有括號進行匹配,對于任何截取的一段l,rl,rl,r,括號匹配的要求是不變的,所以直接維護每個左括號匹配的右括號位置即可,每次詢問用一個區間max即可
)厲害的人可以搞一個O(n)?O(1)\mathcal O(n)-\mathcal O(1)O(n)?O(1)rmq

L

根據擴展歐幾里得可知x,y的通解
現在相當于求ax(b+x)+cy(d+y)ax(b+x)+cy(d+y)ax(b+x)+cy(d+y)
然后因為給出的系數都很小,好像枚舉就好了

結語

總結

以上是生活随笔為你收集整理的cometoj contest 6(记录型博客)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 两根大肉大捧一进一出好爽视频 | 秋霞在线观看视频 | 久久国产精品一区二区 | 国产福利资源在线 | 怡红院最新网址 | 欧美久久一级 | 亚洲国产精品成人 | 中文字幕 日本 | 轻轻色在线观看 | 青青草成人在线 | 少妇人妻无码专区视频 | 女人裸体免费网站 | 亚洲最大的网站 | 黄色香蕉网 | 欧美极品喷水 | 精品久久ai | 国产馆在线观看 | 日韩视频在线一区二区 | 欧美一区二区三区四区在线观看 | 日韩三级久久 | aaaa级片 | 亚洲m码 欧洲s码sss222 | av久久久久久 | 第一福利视频 | 大黑人交xxx极品hd | 中文字幕女同 | 寡妇一级片 | 天堂а√在线中文在线 | 亚洲性影院 | 黄色短视频在线播放 | 日韩午夜网站 | 69精品丰满人妻无码视频a片 | 天天操天天操天天操 | 亚洲影院在线播放 | 免费a在线观看 | 久久狠狠爱 | 欧美在线视频网站 | www.黄色网址| 麻豆免费在线观看视频 | 自拍日韩亚洲一区在线 | 日本午夜在线视频 | 久久99精品久久久久久水蜜桃 | 久久久久久久久久久久久久国产 | av有码在线观看 | 婷婷二区 | 久久久男人天堂 | 国产精品扒开腿做爽爽爽视频 | av电影网站在线观看 | 天天操天天舔天天干 | 亚洲毛片在线看 | 精品婷婷| 九九九九国产 | 1024在线视频 | 国产高清网站 | 无码一区二区精品 | 日本少妇xxxx软件 | 国产113页 | 中文字幕久久久久久久 | 自拍超碰在线 | 国产精品一区二区三区四区五区 | 娇妻av| 一本加勒比北条麻妃 | 最好看的2019年中文在线观看 | 二区三区视频 | 色综合中文 | 69免费视频 | 人人爱人人艹 | 中文字幕乱码人妻二区三区 | 国产夜夜夜 | 豆花视频在线播放 | 激情欧美日韩 | 黄色无遮挡 | 亚洲影院中文字幕 | 久久久久久香蕉 | 男人天堂b | 国产麻豆一区二区三区在线观看 | 国产中文欧美日韩在线 | 极品国产白皙 | 日韩在线91 | 一色屋免费视频 | 久久色网| 超碰在97| 超碰在线进入 | 国产精品影院在线观看 | xxxx日本黄色| 亚洲精品国产精品乱码桃花 | 国产又粗又猛又爽 | 最新视频 - 8mav | 国产麻豆交换夫妇 | 强辱丰满人妻hd中文字幕 | 天天摸天天干天天操 | 久久综合欧美 | 国产欧美一区二区三区精品酒店 | 国产成人99久久亚洲综合精品 | 亚洲三级电影 | 成人在线免费小视频 | 久久综合高清 | 刘亦菲毛片一区二区三区 | 在线理论片|