Разбор
Tutorial is loading...
Решение (Vovuh)
#include <bits/stdc++.h>
using namespace std;
int main() {
#ifdef _DEBUG
freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
#endif
int n, k;
cin >> n >> k;
for (int i = 0; i < k; ++i) {
if (n % 10 == 0) n /= 10;
else n--;
}
cout << n << endl;
return 0;
}
Разбор
Tutorial is loading...
Решение (Vovuh)
#include <bits/stdc++.h>
using namespace std;
int main() {
#ifdef _DEBUG
freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
#endif
int n;
cin >> n;
string s;
cin >> s;
int res = 0;
string ans;
for (int i = 0; i < n - 1; ++i) {
int cur = 0;
for (int j = 0; j < n - 1; ++j)
if (s[j] == s[i] && s[j + 1] == s[i + 1])
++cur;
if (res < cur) {
res = cur;
ans = string(1, s[i]) + string(1, s[i + 1]);
}
}
cout << ans << endl;
return 0;
}
Разбор
Tutorial is loading...
Решение (Vovuh)
#include <bits/stdc++.h>
using namespace std;
int main() {
#ifdef _DEBUG
freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
#endif
int n, k;
scanf("%d %d", &n, &k);
vector<int> a(n);
for (int i = 0; i < n; ++i)
scanf("%d", &a[i]);
sort(a.begin(), a.end());
int ans;
if (k == 0) {
ans = a[0] - 1;
} else {
ans = a[k - 1];
}
int cnt = 0;
for (int i = 0; i < n; ++i)
if (a[i] <= ans) ++cnt;
if (cnt != k || !(1 <= ans && ans <= 1000 * 1000 * 1000)) {
puts("-1");
return 0;
}
printf("%d\n", ans);
return 0;
}
977D - Подели на три, умножь на два
Разбор
Tutorial is loading...
Решение (eddy1021)
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int count3(LL x){
int ret=0;
while(x % 3 == 0){
ret++;
x /= 3;
}
return ret;
}
int n;
vector<pair<int,LL>> v;
int main(){
cin>>n;
v.resize(n);
for(int i=0; i<n; i++){
cin>>v[i].second;
v[i].first=-count3(v[i].second);
}
sort(v.begin(), v.end());
for(int i=0; i<n; i++)
printf("%lld%c", v[i].second, " \n"[i + 1 == n]);
}
Разбор
Tutorial is loading...
Решение (Vovuh)
#include <bits/stdc++.h>
using namespace std;
const int N = 200 * 1000 + 11;
int n, m;
int deg[N];
bool used[N];
vector<int> comp;
vector<int> g[N];
void dfs(int v) {
used[v] = true;
comp.push_back(v);
for (auto to : g[v])
if (!used[to])
dfs(to);
}
int main() {
#ifdef _DEBUG
freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
#endif
scanf("%d %d", &n, &m);
for (int i = 0; i < m; ++i) {
int x, y;
scanf("%d %d", &x, &y);
--x, --y;
g[x].push_back(y);
g[y].push_back(x);
++deg[x];
++deg[y];
}
int ans = 0;
for (int i = 0; i < n; ++i) {
if (!used[i]) {
comp.clear();
dfs(i);
bool ok = true;
for (auto v : comp) ok &= deg[v] == 2;
if (ok) ++ans;
}
}
printf("%d\n", ans);
return 0;
}
977F - Последовательная подпоследовательность
Разбор
Tutorial is loading...
Решение (Vovuh)
#include <bits/stdc++.h>
using namespace std;
int main() {
#ifdef _DEBUG
freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
#endif
int n;
scanf("%d", &n);
vector<int> a(n);
for (int i = 0; i < n; ++i)
scanf("%d", &a[i]);
map<int, int> dp;
int ans = 0;
int lst = 0;
for (int i = 0; i < n; ++i) {
int x = a[i];
dp[x] = dp[x - 1] + 1;
if (ans < dp[x]) {
ans = dp[x];
lst = x;
}
}
vector<int> res;
for (int i = n - 1; i >= 0; --i) {
if (a[i] == lst) {
res.push_back(i);
--lst;
}
}
reverse(res.begin(), res.end());
printf("%d\n", ans);
for (auto it : res)
printf("%d ", it + 1);
puts("");
return 0;
}