Dashboard - Codeforces Round 901 (Div. 2) - Codeforces
题意:有一个炸弹,给出初始爆炸时间b,可以进行n次操作,每次可以延长炸弹爆炸时间x[i],但最多不能延长超过a,如何操作可以最大程度延长炸弹爆炸时间
思路:因为炸弹的初始时间和每次操作的时间都是大于0的,每次都等炸弹为1的时候进行操作即可
AC code:
#include
#define endl '\n'
#define int long long
#define fast() ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr)
using namespace std;
typedef long long LL;
typedef pair PCI;
typedef pair PII;
const int N = 2e5+10, M = 1001;
const int INF = 0x3f3f3f3f, mod = 998244353;
int T, n, m;
int a, b, x[N];
int gcd(int a, int b){
if(b) while((a %= b) && (b %= a));
return a + b;
}
signed main(){
fast();
T = 1;
cin >> T;
while(T --){
cin >> a >> b >> n;
for(int i = 0; i < n; i ++)
cin >> x[i];
sort(x, x + n);
int cnt = 0;
for(int i = 0; i < n; i ++){
if(b + x[i] > a) cnt += b - 1, b = min(x[i] + 1, a);
else cnt ++, b += x[i] - 1;
if(!b) break;
}
cout << b + cnt << endl;
}
return 0;
}
题意:J和G各自有n和m个苹果,每个苹果上有各自的数值代表价值,可以进行n轮游戏,第i轮时,若i为奇数,J可以选择交换自己任一苹果与G的任一苹果或者不交换,i为偶数时选择权给G,各自都会最佳博弈,求J最终可以得到的苹果最大价值总和
思路:
AC code:
#include
#define endl '\n'
#define int long long
#define fast() ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr)
using namespace std;
typedef long long LL;
typedef pair PCI;
typedef pair PII;
const int N = 2e5+10, M = 1001;
const int INF = 0x3f3f3f3f, mod = 998244353;
int T, n, m, k;
int a[N], b[N];
int gcd(int a, int b){
if(b) while((a %= b) && (b %= a));
return a + b;
}
signed main(){
fast();
T = 1;
cin >> T;
while(T --){
cin >> n >> m >> k;
int sum = 0, sum2 = 0;
for(int i = 0; i < n; i ++)
cin >> a[i], sum += a[i];
for(int i = 0; i < m; i ++)
cin >> b[i], sum2 += b[i];
sort(a, a + n);
sort(b, b + m);
int ans = sum - a[0] + b[m - 1];
if(ans < sum){
ans = sum;
ans = ans - a[n - 1] + b[0];
}
else{
ans = ans - max(a[n - 1], b[m - 1]) + min(a[0], b[0]);
}
if(k % 2){
int cnt = ans - min(a[0], b[0]) + max(a[n - 1], b[m - 1]);
ans = max(ans, cnt);
}
cout << ans << endl;
}
return 0;
}
题意:把n个苹果分给m个人,每次操作可以把一块苹果平分,问最少需要多少操作,否则输出-1
思路:先特判,当苹果可以直接平分时操作数为0,否则直接暴力跑,每轮先把能平分的平分完,剩下的苹果全部切半,操作数即剩下的苹果块数,跑循环即可
AC code:
#include
#define endl '\n'
#define int long long
#define fast() ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr)
using namespace std;
typedef long long LL;
typedef pair PCI;
typedef pair PII;
const int N = 2e5+10, M = 1001;
const int INF = 0x3f3f3f3f, mod = 998244353;
int T, n, m;
//int a[N], b[N];
int gcd(int a, int b){
if(b) while((a %= b) && (b %= a));
return a + b;
}
signed main(){
fast();
T = 1;
cin >> T;
while(T --){
cin >> n >> m;
if(n % m == 0) cout << 0 << endl;
else{
int cnt = 0;
int flag = 0;
for(int i = 0; i < 2e3; i ++){
if(n > m) n = n % m;
cnt += n;
n *= 2;
if(n % m == 0){
flag = 1;
break;
}
}
if(flag) cout << cnt << endl;
else cout << "-1" << endl;
}
}
return 0;
}
/*
_ooOoo_
o8888888o
88" . "88
(| ^_^ |)
O\ = /O
____/`---'\____
.' \\| |// `.
/ \\||| : |||// \
/ _||||| -:- |||||- \
| | \\\ - /// | |
| \_| ''\---/'' | |
\ .-\__ `-` ___/-. /
___`. .' /--.--\ `. . __
."" '< `.___\_<|>_/___.' >'"".
| | : `- \`.;`\ _ /`;.`/ - ` : | |
\ \ `-. \_ __\ /__ _/ .-` / /
======`-.____`-.___\_____/___.-`____.-'======
`=---='
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
佛祖保佑AC,永无bug缠身
*/