# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1209206 | mychecksedad | Broken Device (JOI17_broken_device) | C++20 | 20 ms | 1576 KiB |
/* Author : Mychecksdead */
#include<bits/stdc++.h>
#include "Annalib.h"
using namespace std;
#define ll long long int
#define MOD (1000000000+7)
#define MOD1 (998244353)
#define pb push_back
#define all(x) x.begin(), x.end()
#define en cout << '\n'
#define ff first
#define ss second
#define pii pair<int,int>
#define vi vector<int>
const int N = 1e6+100, M = 1e5+10, K = 52, MX = 30;
void Anna( int n, long long X, int k, int p[] ){
vi O = {7, 78, 106, 118, 90, 144, 64, 122, 127, 83, 92, 68, 82, 93, 47, 148, 130, 108, 23, 91, 80, 132, 86, 26, 77, 117, 5, 94, 128, 120, 141, 17, 102, 59, 54, 65, 79, 101, 39, 142, 138, 27, 115, 37, 89, 107, 52, 3, 74, 14, 103, 36, 119, 12, 2, 16, 40, 143, 28, 57, 140, 4, 42, 8, 147, 49, 20, 62, 121, 45, 87, 22, 43, 72, 44, 61, 100, 139, 124, 51, 6, 104, 73, 123, 63, 48, 95, 110, 70, 41, 88, 32, 131, 76, 129, 29, 85, 31, 126, 112, 96, 75, 135, 116, 55, 60, 58, 56, 35, 25, 109, 33, 50, 84, 38, 146, 98, 113, 149, 137, 19, 18, 24, 46, 125, 71, 1, 53, 11, 105, 0, 111, 145, 114, 67, 13, 34, 66, 10, 69, 21, 136, 15, 81, 133, 134, 97, 9, 99, 30};
vector<int> good(n, 1);
for(int i = 0; i < k; ++i) good[p[i]] = 0;
int ptr = 0;
function<int(int)> get = [&](int d) {
int val = X % d;
X /= d;
return val;
};
for(int i = 3; i < n; i += 4){
int bad = 4 - (good[O[i]] + good[O[i-1]] + good[O[i-2]] + good[O[i-3]]);
if(bad == 0){
Set(O[i], 1);
for(int j = i-3; j < i; ++j){
Set(O[j], get(2));
}
}else if(bad == 1){
Set(O[i], 0);
int val = get(3);
if(good[O[i]] == 0){
if(val == 0){
Set(O[i-3], 0);
Set(O[i-2], 0);
Set(O[i-1], 1);
}else if(val == 1){
Set(O[i-3], 0);
Set(O[i-2], 1);
Set(O[i-1], 0);
}else{
Set(O[i-3], 0);
Set(O[i-2], 1);
Set(O[i-1], 1);
}
}else if(good[O[i-3]] == 0){
if(val == 0){
Set(O[i-3], 0);
Set(O[i-2], 0);
Set(O[i-1], 1);
}else if(val == 1){
Set(O[i-3], 0);
Set(O[i-2], 1);
Set(O[i-1], 0);
}else{
Set(O[i-3], 0);
Set(O[i-2], 1);
Set(O[i-1], 1);
}
}else if(good[O[i-2]] == 0){
if(val == 0){
Set(O[i-3], 0);
Set(O[i-2], 0);
Set(O[i-1], 1);
}else if(val == 2){
Set(O[i-3], 1);
Set(O[i-2], 0);
Set(O[i-1], 0);
}else{
Set(O[i-3], 1);
Set(O[i-2], 0);
Set(O[i-1], 1);
}
}else{
if(val == 0){
Set(O[i-3], 1);
Set(O[i-2], 1);
Set(O[i-1], 0);
}else if(val == 1){
Set(O[i-3], 0);
Set(O[i-2], 1);
Set(O[i-1], 0);
}else{
Set(O[i-3], 1);
Set(O[i-2], 0);
Set(O[i-1], 0);
}
}
}else{
Set(O[i], 0);
Set(O[i-1], 0);
Set(O[i-2], 0);
Set(O[i-3], 0);
}
}
if(good[O[n-1]] && good[O[n-2]]){
if(get(2)){
Set(O[n-1], 1);
Set(O[n-2], 1);
}else{
Set(O[n-1], 1);
Set(O[n-2], 0);
}
}else{
Set(O[n-2], 0);
Set(O[n-1], 0);
}
}
#include<bits/stdc++.h>
#include "Brunolib.h"
using namespace std;
#define ll long long int
#define MOD (1000000000+7)
#define MOD1 (998244353)
#define pb push_back
#define all(x) x.begin(), x.end()
#define en cout << '\n'
#define ff first
#define ss second
#define pii pair<int,int>
#define vi vector<int>
const int N = 1e6+100, M = 1e5+10, K = 52, MX = 30;
long long Bruno( int n, int a[] ){
vi O = {7, 78, 106, 118, 90, 144, 64, 122, 127, 83, 92, 68, 82, 93, 47, 148, 130, 108, 23, 91, 80, 132, 86, 26, 77, 117, 5, 94, 128, 120, 141, 17, 102, 59, 54, 65, 79, 101, 39, 142, 138, 27, 115, 37, 89, 107, 52, 3, 74, 14, 103, 36, 119, 12, 2, 16, 40, 143, 28, 57, 140, 4, 42, 8, 147, 49, 20, 62, 121, 45, 87, 22, 43, 72, 44, 61, 100, 139, 124, 51, 6, 104, 73, 123, 63, 48, 95, 110, 70, 41, 88, 32, 131, 76, 129, 29, 85, 31, 126, 112, 96, 75, 135, 116, 55, 60, 58, 56, 35, 25, 109, 33, 50, 84, 38, 146, 98, 113, 149, 137, 19, 18, 24, 46, 125, 71, 1, 53, 11, 105, 0, 111, 145, 114, 67, 13, 34, 66, 10, 69, 21, 136, 15, 81, 133, 134, 97, 9, 99, 30};
ll ans = 0;
vector<pii> v;
map<string, int> m;
m["001"] = 0;
m["010"] = 1;
m["011"] = 2;
m["100"] = 2;
m["101"] = 1;
m["110"] = 0;
for(int i = 3; i < n; i += 4){
if(a[O[i]]){
int num = a[O[i - 3]] + 2 * a[O[i - 2]] + 4 * a[O[i - 1]];
v.pb({num, 8});
}else{
string t;
t += char(a[O[i - 3]] + '0');
t += char(a[O[i - 2]] + '0');
t += char(a[O[i - 1]] + '0');
if(t != "000"){
v.pb({m[t], 3});
}
}
}
if(a[O[n-1]] || a[O[n-2]]){
if(a[O[n-1]] && a[O[n-2]]) v.pb({1, 2});
else v.pb({0, 2});
}
reverse(all(v));
for(auto [b, c]: v){
ans *= c;
ans += b;
}
return ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |