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

2021-09-14 02:27:22 字數 1128 閱讀 1797

a

知識點:排序/桶

題意:給乙個陣列,求其中所有不同非零元素的種類數。

解法一:對陣列從小到大排序。很明顯相同的元素排序後一定相鄰,因此種類數=n-(相鄰相等的對數)。注意要特判0是否存在。

時間複雜度o(nlogn),空間複雜度o(1)

解法二:注意到元素的範圍是-1e5~1e5,因此可以開乙個20萬大小的桶陣列用來存放每個元素是否出現。最後統計桶的數量即可(同樣要特判0)。

時間複雜度o(n),空間複雜度o(2e5)

#includeusing namespace std;

int main()

sort(a,a+n);

int cnt=0;

for(i=0;ib

知識點:模擬/貪心

題意:判斷是否可以把』.『字元改為』d』字元,把所有的』w』字元和』s』字元分隔開。若可以輸出yes並輸出任意可行結果。否則輸出no。

解法:只需要判斷是否有相鄰的w和s即可(注意要判斷四個方向)。如果是yes的情況,可以考慮貪心,把所有的』.'變成』d』即可。

#includeusing namespace std;

char a[555][555];

int main()

if(j>0)

if(ic

知識點:貪心

題意:找到a和b,使得a+b=n且a和b的所有數字上數字之和最大。求這個最大值。

解法:很明顯,只需要a=9999…9即可(共有n的位數-1個9)。然後模擬計算最大值。

#includeusing namespace std;

int main()

cout知識點:模擬

題意:找到給定陣列的最長連續子陣列,保證子陣列的相鄰兩項a[i+1]<=2*a[i]。求這個最長的長度。

解法:按題意模擬即可。用乙個cnt維護當前連續長度,max維護cnt的最大值。

#includeusing namespace std;

int main();

int main()

}if(x>1)p[x]++;

}int m=1;

for(i=1;i<111111;i++)m=max(m,p[i]);

cout<}

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

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

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

知識點 列舉 題意 尋找距離陣列某個數最接近的a i k且b i 1的數。解法 按題意模擬即可。includeusing namespace std int main for t 0 t cout 10 t 知識點 數學 題意 找到大於a,且各數字只含乙個非0數字的數,輸出其和a的差。解法 求出a的...

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

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