知識點:列舉
題意:尋找距離陣列某個數最接近的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...