1933A - Переставь и измени знак
Idea: snowysecret, prepared: snowysecret
#include <bits/stdc++.h>
using namespace std;
int main() {
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
vector<int> arr(n);
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
int sum = 0;
for (int i = 0; i < n; i++) {
sum += abs(arr[i]);
}
cout << sum << endl;
}
return 0;
}
1933B - Сделай сумму кратной 3
Idea: snowysecret, prepared: snowysecret, erniepsycholone
#include<bits/stdc++.h>
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
int k;
cin>>k;
int ACC=0;
bool hv=false;
for(int i=0;i<k;i++){
int x;
cin>>x;
ACC+=x;
if(x%3==1){
hv=true;
}
}
if(ACC%3==0){
cout<<0<<endl;
}else if(ACC%3==2){
cout<<1<<endl;
}else{
if(hv==true){
cout<<1<<endl;
}else{
cout<<2<<endl;
}
}
}
}
Idea: dbsbs, prepared: dbsbs, snowysecret
#include <bits/stdc++.h>
#define int long long
using namespace std;
void solve(int tc){
int a, b, l;
cin >> a >> b >> l;
set<int> ans;
for(int i = 0; i <= 34; ++i){
int x = l;
bool fail = false;
for(int _ = 0; _ < i; ++_){
if(x % a){
fail = true;
break;
}
x /= a;
}
if(fail) break;
while(true){
ans.insert(x);
if(x % b) break;
x /= b;
}
}
cout << ans.size();
}
bool multi = true;
signed main() {
int t = 1;
if (multi)cin >> t;
for (int i = 1; i <= t; ++i) {
solve(i);
cout << "\n";
}
return 0;
}
Idea: snowysecret, erniepsycholone, prepared: snowysecret
#include <bits/stdc++.h>
using namespace std;
int main() {
int t;
cin >> t;
while(t--) {
int n;
cin >> n;
int a[n];
for(int i=0; i<n; i++) cin >> a[i];
sort(a, a + n);
if(a[0] != a[1]) {
cout << "YES\n";
}
else {
bool PASS = 0;
for(int i=1; i<n; i++) {
if(a[i] % a[0] != 0) PASS = 1;
}
if(PASS) cout << "YES\n";
else cout << "NO\n";
}
}
}
1933E - Оптимальные тренировки
Idea: snowysecret, prepared: snowysecret
#include "bits/stdc++.h"
using namespace std;
#define int long long
#define double long double
void solve(int tc) {
int n;
cin >> n;
int a[n + 1];
for(int i = 1; i <= n; i++) cin >> a[i];
int ps[n + 1];
ps[0] = 0;
for(int i = 1; i <= n; i++) ps[i] = ps[i - 1] + a[i];
int q;
cin >> q;
while(q--) {
int l, u;
cin >> l >> u;
int lb = l, rb = n;
while(lb < rb) {
int mid = (lb + rb + 1) >> 1;
if(ps[mid] - ps[l - 1] <= u) lb = mid;
else rb = mid - 1;
}
int maxu = -1e18, optid;
for(int i = max(l, lb - 2); i <= min(n, lb + 2); i++) {
int t = ps[i] - ps[l - 1];
int ut = (u + (u - t + 1)) * t / 2;
if(ut > maxu) {
maxu = ut;
optid = i;
}
}
cout << optid << " ";
}
}
signed main() {
int t = 1; cin >> t;
for(int i = 1; i <= t; i++){
solve(i);
cout << "\n";
}
}
1933F - Робот и подземные толчки
Idea: erniepsycholone, prepared: erniepsycholone
View the task in a relative perspective, with robot RT and the ending location moving downwards instead of rocks moving upwards.
#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main(){
int t;
cin >> t;
while (t--){
int n, m;
cin >> n >> m;
bool a[n][m + 1];
for (int i = 0; i < n; i++) {
for (int j = 1; j <= m; j++) {
cin >> a[i][j];
}
}
int dp[n][m + 1];
for (int i = 0; i < n; i++) {
for (int j = 0; j <= m; j++) {
dp[i][j] = INT_MAX;
}
}
dp[0][1] = 0;
for (int i = 1; i <= m; i++) {
for (int j = 0; j < n; j++) {
if (a[j][i]){
continue;
}
dp[j][i] = min(dp[j][i], dp[(j - 1 + n) % n][i - 1] + 1);
}
for (int j = 0; j < 3 * n; j++) {
if (a[j % n][i] || a[(j - 1 + n) % n][i]){
continue;
}
dp[j % n][i] = min(dp[j % n][i], dp[(j - 2 + n) % n][i] + 1);
}
}
int ans = INT_MAX;
for (int i = 0; i < n; i++) {
if (dp[i][m] == INT_MAX){
continue;
}
int npos = ((n - 1) + dp[i][m]) % n;
if (npos < i) npos += n;
int cur = dp[i][m] + min(npos - i, n - (npos - i));
ans = min(ans, cur);
}
if(ans == INT_MAX){
cout << -1 << endl;
}else{
cout << ans << endl;
}
}
}
1933G - Магический рисунок королевской черепахи
Idea: snowysecret, jerryliuhkg, prepared: snowysecret
#include "bits/stdc++.h"
using namespace std;
void solve(int tc) {
int n, m, q;
cin >> n >> m >> q;
bool b[8] = {1, 1, 1, 1, 1, 1, 1, 1};
int ans = 8;
cout << ans << '\n';
while(q--) {
int r, c;
cin >> r >> c;
string shape;
cin >> shape;
if((r + (c+1) / 2) % 2) {
b[0] &= (shape == "circle");
b[1] &= (shape == "square");
}
else {
b[0] &= (shape == "square");
b[1] &= (shape == "circle");
}
if((r + c / 2) % 2) {
b[2] &= (shape == "circle");
b[3] &= (shape == "square");
}
else {
b[2] &= (shape == "square");
b[3] &= (shape == "circle");
}
if((c + (r+1) / 2) % 2) {
b[4] &= (shape == "circle");
b[5] &= (shape == "square");
}
else {
b[4] &= (shape == "square");
b[5] &= (shape == "circle");
}
if((c + r / 2) % 2) {
b[6] &= (shape == "circle");
b[7] &= (shape == "square");
}
else {
b[6] &= (shape == "square");
b[7] &= (shape == "circle");
}
ans = 0;
for(int i = 0; i < 8; i++) ans += b[i];
cout << ans << '\n';
}
}
int main() {
int t;
cin >> t;
for(int i = 1; i <= t; i++) solve(i);
}
Hope the contest was in some way helpful in improving your skills, and that you all had fun!
“If you only do what you can do, you will never be more than you are now.” – Master Oogway