A.Elections
題目大意: 三個人參加選舉,給出目前三個人的得票數,得票最高者勝出。要求求出對于三個人最少應該再得幾票勝出。
思路: 對于目前的人,求出剩下兩人中的較大值,然後直接求差+1即可。
#include <bits/stdc++.h>
#define int long long
using namespace std;
inline void solve(){
int a, b, c; cin >> a >> b >> c;
if(a > b && a > c) cout << 0 << ' ';
else{
int maxbc = max(b, c);
cout << maxbc - a + 1 << ' ';
}
if(b > a && b > c) cout << 0 << ' ';
else{
int maxac = max(a, c);
cout << maxac - b + 1 << ' ';
}
if(c > a && c > b) cout << 0 << endl;
else{
int maxab = max(a, b);
cout << maxab - c + 1 << endl;
}
}
signed main(){
int t = 0; cin >> t;
while(t--) solve();
return 0;
}
B.Make it Divisible by 25
題目大意: 對于給定的數字,每次可以删除一個數字,求一個最小的删除次數,使得删完數字後為 25 25 25的倍數。
思路: 首先考慮能被 25 25 25整除的倍數規律: . . . 25 、 . . . 75 、 . . . 50 、 . . . 00 ...25、...75、...50、...00 ...25、...75、...50、...00。
因為題目保證答案一定存在,是以直接倒序周遊,然後先檢測 5 5 5和 0 0 0,再分類單獨讨論即可。
#include <bits/stdc++.h>
using namespace std;
inline void solve(int ans = 1e9){
string str; cin >> str;
for(int i = str.size() - 1; i > 0; i--){
int len0 = str.size() - i - 1;
if(str[i] == '5'){
for(int j = i - 1; j >= -1; j--){
if(j < 0) { len0 = 1e9; break; }
if(str[j] == '2' || str[j] == '7') break;
else len0++;
}
}
else if(str[i] == '0'){
for(int j = i - 1; j >= -1; j--){
if(j < 0) { len0 = 1e9; break; }
if(str[j] == '0' || str[j] == '5') break;
else len0++;
}
}
if(str[i] == '5' || str[i] == '0') ans = min(ans, len0);
}
cout << ans << endl;
}
int main(){
int t = 0; cin>> t;
while(t--) solve();
return 0;
}