# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1165097 | Sang | Broken Device (JOI17_broken_device) | C++20 | 20 ms | 1520 KiB |
#include "Annalib.h"
#include<bits/stdc++.h>
using namespace std;
#define FOR(i, a, b) for (int i = (a), _b = (b); i <= _b; i++)
#define FORD(i, a, b) for (int i = (a), _b = (b); i >= _b; i--)
#define fi first
#define se second
#define pb push_back
#define ALL(a) (a).begin(), (a).end()
#define task "kbsiudthw"
typedef vector<int> vi;
typedef pair<int, int> ii;
typedef pair<int, ii> pii;
void Anna(int n, long long x, int K, int P[]){
vector<int> bit, marked(n, 0);
FOR (i, 0, 60) bit.pb((x>>i)&1);
reverse(ALL(bit));
FOR (i, 1, K){
marked[P[i-1]] = 1;
}
for (int i = 0; i < n; i += 3){
if (marked[i] + marked[i+1] + marked[i+2] > 1 || bit.empty()){
Set(i, 0); Set(i+1, 0); Set(i+2, 1);
continue;
}
vi a;
a.pb(bit.back()); bit.pop_back();
if (marked[i] + marked[i+1] + marked[i+2] == 0 && !bit.empty()) a.pb(bit.back()), bit.pop_back();
if (a.size() == 2){
if (!a[0] && !a[1]){
Set(i, 0); Set(i+1, 0); Set(i+2, 0);
}
if (a[0] && !a[1]){
Set(i, 1); Set(i+1, 1); Set(i+2, 0);
}
if (!a[0] && a[1]){
Set(i, 1); Set(i+1, 0); Set(i+2, 0);
}
if (a[0] && a[1]){
Set(i, 1); Set(i+1, 1); Set(i+2, 1);
}
} else {
if (a[0]) {
Set(i, marked[i+1]); Set(i+1, marked[i+1]^1); Set(i+2, marked[i+1]);
} else {
if (bit.empty() || bit.back() == 0){
Set(i, 0); Set(i+1, 0); Set(i+2, 0);
if (!bit.empty()) bit.pop_back();
continue;
}
if (marked[i]){
Set(i, 0); Set(i+1, 1); Set(i+2, 1);
} else {
Set(i, 1); Set(i+1, 0); Set(i+2, 0);
}
bit.pop_back();
}
}
}
}
#include "Brunolib.h"
#include<bits/stdc++.h>
using namespace std;
#define FOR(i, a, b) for (int i = (a), _b = (b); i <= _b; i++)
#define FORD(i, a, b) for (int i = (a), _b = (b); i >= _b; i--)
#define fi first
#define se second
#define pb push_back
#define ALL(a) (a).begin(), (a).end()
#define task "kbsiudthw"
typedef vector<int> vi;
typedef pair<int, int> ii;
typedef pair<int, ii> pii;
long long Bruno(int n, int A[]){
long long ans = 0, cur = 0;
for (int i = 0; i < n; i += 3){
array<int, 3> a = {A[i], A[i+1], A[i+2]};
if (!a[0] && !a[1] && a[2]) continue;
cur = min(cur, 61ll);
if (!a[0] && !a[1] && !a[2]){
cur += 2;
continue;
}
if (a[0] && a[1] && !a[2]){
ans += (1ll<<cur);
cur += 2;
continue;
}
if ((a[0] && !a[1] && !a[2]) || (!a[0] && a[1] && a[2])){
ans += (1ll<<(cur + 1));
cur += 2;
continue;
}
if (a[0] & a[1] & a[2]){
ans += (1ll<<cur);
ans += (1ll<<(cur+1));
cur += 2;
continue;
}
ans += (1ll<<cur);
++cur;
}
return ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |