NENUACM 2020 復健訓練 4 題解

2021-10-03 13:12:48 字數 2266 閱讀 4381

題目鏈結

search for pretty integers

題意:給你兩行數(均是個位數),第一行有n個數,第二行有m個數,讓你構造乙個最小的數滿足至少包含乙個第一行裡的數且至少包含乙個第二行裡的數。

思路:顯然,如果兩行數里有相同的數,那麼答案就是這些相同的數里的最小值;否則,以第一行裡的數為十位數,以第二行裡的數為個位數列舉,然後以第二行裡的數為十位數,以第一行裡的數為個位數列舉,取最小值即可。

#include#define mem(a,b) memset((a),b,sizeof(a))

#define de cout題意:給你n個數,讓你把這n個數分成k個子段,找出每個子段裡的最小值,然後求出這些最小值中的最大值,問這個最大值最大是多少。

思路:如果k等1,那麼答案就是這n個數里的最小值;如果k等2,那麼可以列舉所有的分法,然後求出最小值中的最大值;如果k大於等於3,那麼答案就是這n個數里的最大值,因為此時你可以讓最大值自己成為一段,然後把剩下的n-1個數分成k-1段。

#include#define mem(a,b) memset((a),b,sizeof(a))

#define de cout<=1;i--)

min2[i]=min(min2[i+1],a[i]);

int ans=minn;

if(k==1)

ans=minn;

else if(k==2)

else

ans=maxx;

printf("%d\n",ans);

return 0;

}

maximum splitting

題意:讓你回答q次詢問,每次詢問給你乙個數n,問n最多能分成幾個合數的和。

思路:我們希望分成的合數越小越好,而最小的合數是4,所以我們先按4分,不能整除4的話,我們進行分類討論,把餘數加到4上湊成合數就行了。若n%4==0,那麼把n分成n/4個4的和就行了,故答案為n/4;若n%4==1,那麼剩下的那個1要和兩個4組成9,故答案為n/4-1;若n%4==2,那麼剩下的那個2要和乙個4組成6,故答案為n/4;若n%4==3,那麼剩下的那個3要分成1和2,1和兩個4組成9,2和乙個4組成6,故答案為n/4-1。

#include#define mem(a,b) memset((a),b,sizeof(a))

#define de cout<=2) ans=n/4-1;

else ans=-1;

}else if(n%4==2)

else if(n%4==3)

printf("%d\n",ans);

}return 0;

}

something with xor queries

題意:有兩個長度均為n的陣列p和b,p是0到n-1的乙個全排列,b表示數字在p中的位置。(即p[b[i]]=i,例如:n為4時,若p[0]=2,p[1]=3,p[2]=1,p[3]=0,則b[0]=3,b[1]=2,b[2]=0,b[3]=1。)給你n,然後你可以詢問2*n次,每次詢問時給出i,j,返回p[i]異或b[j]的結果,問p陣列有多少種可能的情況,並輸出任意一種。

思路:互動題。詢問所有0,i和i,0,之後就能得知所有數的兩兩異或,(我們可以令c[i][j]=p[i]^b[j],然後我們可以得到c[i][j]=c[i][0] ^ c[0][j] ^c[0][0],因為:c[i][j]=p[i]^b[j]=p[i]^b[0]^p[0]^b[j]^p[0]^b[0]=c[i][0]^c[0][j]^c[0][0])然後就列舉第乙個數,暴力計算即可。

#include#define mem(a,b) memset((a),b,sizeof(a))

#define de cout<0)

ll pow_mod(ll a,ll b,ll mod)

return ret;

}int main()

cnt--;

for(int i=1;i<=cnt;i++) fa[i]=i;

for(int i=1;i<=n;i++) fa[findfa(xx[x[i]])]=findfa(yy[y[i]]);

for(int i=1;i<=n;i++) d[findfa(xx[x[i]])]++;

for(int i=1;i<=cnt;i++) b[findfa(i)]++;

ll ans=1;

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

}printf("%i64d\n",ans);

return 0;

}

復健訓練難題掃除計畫

本次沒有專門設定簽到題,為了降低一定的難度,作者將題目思路寫在了題目標題處 難點 tle 需要多種剪枝 難點 思維 正常情況應以島嶼的x軸座標為依據進行貪心,但這樣會導致錯誤結果 正確做法 難點 tle,re,wa,mle,ce 尤其要注意的是,本題兩點間的距離為樹上路徑中所有節點點權的異或和 剩下...

2020暑期訓練6

shortest path faster algorithm,即佇列優化的bellman ford演算法,最壞情況下時間複雜度 o n m o nm o nm 好像只能在負權圖里用,不然會被卡死。例題 p3371 模板 單源最短路徑 弱化版 就是bfs的原理 include using namesp...

並不對勁的復健訓練 p3674

題目大意 給出序列 a 1,a n n leq10 5,a leq 10 5 有 m m leq 10 5 個以下三類詢問 1 給出 l,r,k k leq 10 5 問是否存在 x,y 使 x in l,r y in l,r a x a y k 2 給出 l,r,k k leq 10 5 問是否存...