bistuacm 2023年第 場新生訓練賽題解

2021-09-22 05:50:36 字數 1498 閱讀 6990

知識點:列舉

題意:尋找距離陣列某個數最接近的a[i]<=k且b[i]=1的數。

解法:按題意模擬即可。

#includeusing namespace std;

int main()

for(t=0;;t++)

cout<<10*t;

}

知識點:數學

題意:找到大於a,且各數字只含乙個非0數字的數,輸出其和a的差。

解法:求出a的最高位和a的位數,(a的最高位+1)*10^(位數-1)即為所求數,求差即可。

#includeusing namespace std;

int main()

if(k==n*m)cout《知識點:字串

題意:乙個字串,若某字元不是最後一次出現,則需要占用乙個空間。若出現了最後一次之後則釋放空間。問至少需要多少空間。

解法:先預處理一遍每個字元出現的最後位置,然後按題意模擬即可。

#includeusing namespace std;

char a[1111111];

int main()

int tong[26]=,cnt=0;

for(i=0;a[i]!='\0';i++)

if(m>k)cout<<"yes";

else cout<<"no";

}

知識點:博弈

題意:給定一陣列。a每次可以取和為奇數的連續段,b每次可以取和為偶數的連續段。兩人輪流取,先取不了的人輸。問最優策略下誰贏。

解法:若sum為奇數,a直接獲勝。

若sum為偶數,假設存在某奇數,顯然a取完之後總和變成奇數,之後b無論取不取都是a獲勝。

若不存在奇數,則a取不了,b獲勝。

#includeusing namespace std;

int main()

if(sum&1)cout<<"first";

else if(!jud)cout<<"second";

else cout<<"first";

}

知識點:貪心

題意:每一次可以進新房間或舊房間(要求是上一次走過的)。問房間最小值。

解法:顯然不可能有兩次上一次「同一時間」走到舊房間。因此遇到相同的數則新房間數加一即可。要注意的是t0為0的時候已經有乙個房間,因此遇到0的時候一定有新房間。

#includeusing namespace std;

int a[222222];

int main();

int a[222222];

mov m[222222];

mapm;

map::iterator it1,it2;

bool f(int i,int j)

}int main()

m[a[i]]=cnt;

int m=0;

for(i=1;icout<}

bistuacm 2023年新生訓練賽 第 場題解

比賽難度 cf 1000 1500 知識點 模擬 題意 乙個陣列,每次操作可以增加乙個數或刪除乙個數。問最少多少次操作可以讓mex k?mex值陣列不存在的最小非負整數 解法 按題意模擬即可。0到k 1若不存在則增加之。k若存在則刪除之。includeusing namespace std int ...

bistuacm 2023年第三場新生訓練賽題解

a 知識點 排序 桶 題意 給乙個陣列,求其中所有不同非零元素的種類數。解法一 對陣列從小到大排序。很明顯相同的元素排序後一定相鄰,因此種類數 n 相鄰相等的對數 注意要特判0是否存在。時間複雜度o nlogn 空間複雜度o 1 解法二 注意到元素的範圍是 1e5 1e5,因此可以開乙個20萬大小的...

bistuacm 2023年第四場高階訓練賽題解

因vjudge經常崩潰而無法交題,而北交平台偶爾題目亂碼,因此用這種形式 難度 cf 1300 1800原題 知識點 模擬 題意 先求出所有數的和sum,然後從左到右找到字首和大於等於sum的一半即可。includeusing namespace std int main for i 0 i sum...