A. Buying Torches
初始你有一个木棍,造出k把火炬需要k个木棍和k个煤块,而一个煤块需要y个木棍,所以需要木棍k+y∗k−1个,而每次操作你可以获得x−1个木棍,所以为了获得木根,需要操作⌈k+y∗k−1/(x−1)⌉,之后获得 k 个煤块需要操作k次,所以答案就是⌈k+y∗k−1/(x−1)⌉+k.
#import<bits/stdc++.h> using namespace std; long long k,t,x,y; int main() { for(cin>>t;t--;) { cin>>x>>y>>k; long long num = k*y+k-1; long long ans = num/(x - 1); if(num%(x-1)) ans ++ ; cout << ans + k << endl; } return 0; }B. Negative Prefixes
#include <iostream> #include <algorithm> #include <cstdio> using namespace std; const int N = 110; int a[N], b[N]; bool st[N]; int main() { int t, n, m, u, v; scanf("%d", &t); while(t -- ) { scanf("%d", &n); for(int i = 0; i < n; i ++ ) cin >> a[i]; for(int i = 0; i < n; i ++ ) cin >> st[i]; int k = 0; for(int i = 0; i < n; i ++ ) { if(!st[i]) { b[k ++ ] = a[i]; } } sort(b, b + k); reverse(b, b + k); int x = k; k = 0; for(int i = 0; i < n; i ++ ) { if(!st[i]) { printf("%d ", b[k ++ ]); } else printf("%d ", a[i]); } puts(""); } return 0; }C
#include <iostream> #include <algorithm> #include <cstdio> using namespace std; const int N = 2e5 + 10; int a[N]; int main() { int t, n, m, u, v; scanf("%d", &t); while(t -- ) { scanf("%d", &n); for(int i = 0; i < n; i ++ ) scanf("%d", &a[i]); int sum = a[0]; for(int i = 1; i < n - 2; i ++ ) { if(a[i] && a[i + 1] && a[i + 2]) { sum ++ ; i += 2; } } printf("%d\n", sum); } return 0; }