(因vjudge經常崩潰而無法交題,而北交平台偶爾題目亂碼,因此用這種形式)
難度:cf 1300~1800原題
知識點:模擬
題意:先求出所有數的和sum,然後從左到右找到字首和大於等於sum的一半即可。
#includeusing namespace std;
int main()
for(i=0;i=sum)break;
}cout《知識點:字串,暴力列舉
題意:一次操作可新增乙個字元,或copy已有字串(一共只能copy一次)問最少運算元。
解法:由於n很小(只有100),因此可o(n^2)暴力查詢最大的a(0~ i)=a(i+1~2i)的相同子串。
#includeusing namespace std;
int main()
else cout<<0;
cout<<" ";
}if(a[i]=='a')cout<<"1";
else cout<<"0";
}
知識點:樹形dp,dfs
題意:對於給定有根樹,對每個葉子染色,對於i從1到n,求快樂節點不小於i個的最小染色的顏色數量k。所謂快樂節點指:以該節點為根的子樹,所有葉子的顏色不同。
解法:設葉子總數為m。顯然,i=n時k為m,i≤p時k為1。這時可以觀察到,假設所有葉子的權值為1,每個節點的權值為它所有孩子權值之和,那麼這個權值就是該節點作為「快樂節點」的最小染色數。因此可以用乙個dp[i]表示第i個節點的權值,然後dfs求所有節點權值,最後排序後依次從小到大輸出即可。
#includeusing namespace std;
vectorg[111111];
int dp[111111]=;
void dfs(int x)
dfs(1);
sort(dp+1,dp+1+n);
for(i=1;i<=n;i++)cout《知識點:貪心
題意:相鄰兩數x和y合併,新數可選擇為x-y或y-x。求最終只剩乙個數的最大值。
解法:顯然,若所有數有負有正,那麼sum(abs(a[i]))即為所求。若全為正或全為負,則要犧牲絕對值最小的那個數,最終的sum-2min(abs)即可。
注意要處理n=1的特解。
#includeusing namespace std;
long long a[555555];
int main()
if(n==1)
long long power(long long a,long long b)
return res;
}long long c[111111];
char in[111111];
int main()
for(i=0;ilong long sum=0;
int chu=(n+1)/k;
long long q=power(b,k)*power(inv(a),k)%mod;
if(q==1)
cout<<(sum+mod)%mod;
return 0;
}for(i=0;icout<}
bistuacm 2023年第三場新生訓練賽題解
a 知識點 排序 桶 題意 給乙個陣列,求其中所有不同非零元素的種類數。解法一 對陣列從小到大排序。很明顯相同的元素排序後一定相鄰,因此種類數 n 相鄰相等的對數 注意要特判0是否存在。時間複雜度o nlogn 空間複雜度o 1 解法二 注意到元素的範圍是 1e5 1e5,因此可以開乙個20萬大小的...
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 ...