이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "abc.h"
#include <bits/stdc++.h>
using namespace std;
#define pii pair<int,int>
#define fs first
#define sc second
#define vi vector<int>
// you may find the definitions useful
const int OP_ZERO = 0; // f(OP_ZERO, x0, x1) = 0
const int OP_NOR = 1; // f(OP_NOR, x0, x1) = !(x0 || x1)
const int OP_GREATER = 2; // f(OP_GREATER, x0, x1) = (x0 > x1)
const int OP_NOT_X1 = 3; // f(OP_NOT_X1, x0, x1) = !x1
const int OP_LESS = 4; // f(OP_LESS, x0, x1) = (x0 < x1)
const int OP_NOT_X0 = 5; // f(OP_NOT_X0, x0, x1) = !x0
const int OP_XOR = 6; // f(OP_XOR, x0, x1) = (x0 ^ x1)
const int OP_NAND = 7; // f(OP_NAND, x0, x1) = !(x0 && x1)
const int OP_AND = 8; // f(OP_AND, x0, x1) = (x0 && x1)
const int OP_EQUAL = 9; // f(OP_EQUAL, x0, x1) = (x0 == x1)
const int OP_X0 = 10; // f(OP_X0, x0, x1) = x0
const int OP_GEQ = 11; // f(OP_GEQ, x0, x1) = (x0 >= x1)
const int OP_X1 = 12; // f(OP_X1, x0, x1) = x1
const int OP_LEQ = 13; // f(OP_LEQ, x0, x1) = (x0 <= x1)
const int OP_OR = 14; // f(OP_OR, x0, x1) = (x0 || x1)
const int OP_ONE = 15; // f(OP_ONE, x0, x1) = 1
const int NUM_LEN = 16;
const int NAME_LEN = 19;
const int OBJ_LEN = NUM_LEN+NAME_LEN*2+1;
vector<int> OUT;
//vector<int> OUT;
// Alice
namespace PERM{
string code;
void encode(vector<int> v){
if(v.size() <= 1)return;
int n = v.size();
if(n&1){
v.push_back(n);
n++;
}
vector<int> pos(n,-1);
for(int i = 0;i<n;i++)pos[v[i]] = i;
for(auto &i:pos)assert(i>=0);
int m = n>>1;
auto dual = [&](int k){assert(0<=k&&k<n);return k<m?k+m:k-m;};
auto same = [&](int a,int b)->bool{return (a<m&&b<m)||(a>=m&&b>=m);};
string flip(m,'0');
bool done[n] = {};
for(int i = 0;i<n;i++){
if(done[i]||!same(i,pos[dual(v[i])]))continue;
int now = i;
vector<int> cyc;
cyc.push_back(now);
do{
done[now] = true;
now = pos[dual(v[now])];
cyc.push_back(now);
done[now] = true;
now = dual(now);
cyc.push_back(now);
}while(!done[now]);
vector<int> tags;
for(int i = 1;i<cyc.size();i++){
if(same(cyc[i],cyc[i-1]))tags.push_back(i);
}
assert(tags.size()%2 == 0);
for(int i = 1;i<tags.size();i+=2){
for(int j = tags[i-1];j<tags[i];j++){
flip[cyc[j]%m] = '1';
}
}
}
code += flip;
vector<int> lv,rv;
for(int i = 0;i<m;i++){
if(flip[i] == '1'){
swap(v[i],v[i+m]);
}
}
for(int i = 0;i<m;i++){
lv.push_back(v[i]%m);rv.push_back(v[dual(i)]%m);
}
encode(lv);
encode(rv);
flip = string(m,'0');
sort(v.begin(),v.begin()+m,[&](int a,int b){return a%m<b%m;});
sort(v.begin()+m,v.end(),[&](int a,int b){return a%m<b%m;});
for(int i = 0;i<m;i++){
if(v[i]>v[i+m])flip[i] = '1';
}
code += flip;
return;
}
}
function<int(string)> Hash = [](string s){
int re = 0;
int ts = 1;
for(int i = 1;i<=4;i++){
ts *= 26;
if(s.size()>i)re += ts;
}
ts = 1;
for(auto &i:s){
re += ts*(i-'a'+1);
ts *= 26;
}
assert(__lg(re)<NAME_LEN);
return re;
};
int // returns la
alice(
/* in */ const int n,
/* in */ const char names[][5],
/* in */ const unsigned short numbers[],
/* out */ bool outputs_alice[]
) {
vector<pii> v;
for(int i = 0;i<n;i++){
v.push_back(pii(Hash(string(names[i])),i));
}
sort(v.begin(),v.end());
vector<int> perm;
for(auto &i:v)perm.push_back(i.sc);
PERM::code.clear();
PERM::encode(perm);
auto code = PERM::code;
int ptr = 0;
for(int i = 0;i<n;i++){
int id = v[i].sc;
for(int j = 0;j<NAME_LEN;j++){
outputs_alice[ptr++] = (v[i].fs>>j)&1;
}
for(int j = 0;j<NUM_LEN;j++){
outputs_alice[ptr++] = (numbers[id]>>j)&1;
}
}
for(auto &i:code){
outputs_alice[ptr++] = (i=='0'?0:1);
}
cerr<<"alice perm:"<<code.size()<<endl;
return ptr;
}
// Bob
int // returns lb
bob(
/* in */ const int m,
/* in */ const char senders[][5],
/* in */ const char recipients[][5],
/* out */ bool outputs_bob[]
) {
int ptr = 0;
vector<pii> v;
for(int i = 0;i<m;i++)v.push_back(pii(Hash(string(senders[i])),Hash(string(recipients[i]))));
sort(v.begin(),v.end(),[](pii a,pii b){return a.sc>b.sc;});
vector<int> perm;
for(int i = 0;i<m;i++)perm.push_back(i);
sort(perm.begin(),perm.end(),[&](int a,int b){return v[a].fs>v[b].fs;});
auto tv = v;
for(int i = 0;i<m;i++)tv[i] = v[perm[i]];
v = tv;
for(int i = 1;i<v.size();i++)assert(v[i-1].fs>=v[i].fs);
PERM::code.clear();
PERM::encode(perm);
auto code = PERM::code;
cerr<<"bob perm:"<<code.size()<<endl;
for(int i = 0;i<m;i++){
for(int j = 0;j<NAME_LEN;j++){
outputs_bob[ptr++] = (v[i].fs>>j)&1;
}
for(int j = 0;j<NAME_LEN;j++){
outputs_bob[ptr++] = (v[i].sc>>j)&1;
}
}
for(int i = 0;i<code.size();i++){
outputs_bob[ptr++] = (code[i] == '0'?0:1);
}
return ptr;
}
int zero,one;
struct Obj{
int name1,name2,val;
int tp;//pointer to type
Obj(){
name1 = name2 = val = tp = zero;
}
Obj(int a){
name1 = a,name2 = a+NAME_LEN,tp = a+NAME_LEN*2,val = a+NAME_LEN*2+1;
}
};
const int B = 2048;
// Circuit
int // returns l
circuit(
/* in */ const int la,
/* in */ const int lb,
/* out */ int operations[],
/* out */ int operands[][2],
/* out */ int outputs_circuit[][16]
) {
int ptr = la+lb;
function<int(int ,int ,int)> addop = [&](int a,int b,int op){
assert(ptr<20000000);
operands[ptr][0] = a,operands[ptr][1] = b;
operations[ptr] = op;
return ptr++;
};
function<pii(int,int)> HALF_ADDER = [&](int a,int b){//{val,carry}
pii re;
re.fs = addop(a,b,OP_XOR);
re.sc = addop(a,b,OP_AND);
return re;
};
function<int(int,int)> FULL_ADDER = [&](int a,int b){//adds a,b and returns c
vector<pii> re;
int car = zero;
for(int i = 0;i<NUM_LEN;i++){
auto [t1,t2] = HALF_ADDER(a+i,b+i);
re.push_back(pii(t1,car));
car = addop(t1,car,OP_AND);
car = addop(car,t2,OP_OR);
}
int head = ptr;
for(auto &i:re){
addop(i.fs,i.sc,OP_XOR);
}
vector<pii>().swap(re);
return head;
};
function<int(Obj&,Obj&,bool)> LESS = [&](Obj& a,Obj& b,bool f){//size-1 ~ 0,a<b?1:0
int flag = zero,tag = zero;
for(int i = NAME_LEN-1;i>=0;i--){
int ta = (f?a.name2+i:a.name1+i);
int tb = (f?b.name2+i:b.name1+i);
assert(ta>=0&&ta<ptr&&tb>=0&&tb<ptr);
int tmp = addop(ta,tb,OP_LESS);
tmp = addop(flag,tmp,OP_LESS);
tag = addop(tag,tmp,OP_OR);
tmp = addop(ta,tb,OP_XOR);
flag = addop(flag,tmp,OP_OR);
}
int ta = a.tp,tb = b.tp;
assert(ta>=0&&ta<ptr&&tb>=0&&tb<ptr);
int tmp = addop(ta,tb,OP_LESS);
tmp = addop(flag,tmp,OP_LESS);
tag = addop(tag,tmp,OP_OR);
tmp = addop(ta,tb,OP_XOR);
flag = addop(flag,tmp,OP_OR);
return tag;
};
auto SWAPIF = [&](Obj& oa,Obj& ob,int f){
vi pa,pb;
vector<pii> va,vb;
for(int i = 0;i<NAME_LEN;i++){
pa.push_back(oa.name1+i);
pb.push_back(ob.name1+i);
}
for(int i = 0;i<NAME_LEN;i++){
pa.push_back(oa.name2+i);
pb.push_back(ob.name2+i);
}
pa.push_back(oa.tp);
pb.push_back(ob.tp);
for(int i = 0;i<NUM_LEN;i++){
pa.push_back(oa.val+i);
pb.push_back(ob.val+i);
}
assert(pa.size() == OBJ_LEN&&pb.size() == OBJ_LEN);
for(int i = 0;i<pa.size();i++){//va:OP_OR;vb:OP_XOR
int ta = pa[i],tb = pb[i];
int t1 = addop(f,ta,OP_LESS);
int t2 = addop(f,tb,OP_AND);
va.push_back(pii(t1,t2));
int xorsum = addop(ta,tb,OP_XOR);
vb.push_back(pii(xorsum,-1));
}
oa.name1 = ptr,oa.name2 = ptr+NAME_LEN,oa.tp = ptr+NAME_LEN*2,oa.val = ptr+NAME_LEN*2+1;
for(auto &i:va)addop(i.fs,i.sc,OP_OR);
ob.name1 = ptr,ob.name2 = ptr+NAME_LEN,ob.tp = ptr+NAME_LEN*2,ob.val = ptr+NAME_LEN*2+1;
for(int i = 0;i<vb.size();i++)addop(vb[i].fs,oa.name1+i,OP_XOR);
assert(va.size() == OBJ_LEN&&vb.size() == OBJ_LEN);
vector<pii>().swap(va);
vector<pii>().swap(vb);
vi().swap(pa);
vi().swap(pb);
return;
};
vector<vi> done;
function<void(int,int,vector<Obj>&,bool)> bitonic_merge;
bitonic_merge = [&](int l,int r,vector<Obj>& v,bool f)->void{
if(l == r)return;
int len = (r-l+1);
assert((1<<__lg(len)) == len);
len>>=1;
int mid = (l+r)>>1;
for(int i = l;i<=mid;i++){
int flag;
vi va,vb;
flag = LESS(v[i+len],v[i],f);
done.push_back(vi({i,i+len,flag}));
SWAPIF(v[i],v[i+len],flag);
}
bitonic_merge(l,mid,v,f);
bitonic_merge(mid+1,r,v,f);
return;
};
/*function<void(vector<Obj>&)>*/auto undo_bitonic = [&](vector<Obj> &v)->void{
int C = 0;
while(!done.empty()){
auto a = done.back()[0],b = done.back()[1],f = done.back()[2];
done.pop_back();
assert(0<=a&&a<v.size()&&0<=b&&b<v.size());
SWAPIF(v[a],v[b],f);
}
return;
};
queue<int> q;
function<int()> getcode = [&](){
assert(!q.empty());
auto re = q.front();
q.pop();
return re;
};
function<void(int,int,vector<Obj>&)> apply_perm;
apply_perm = [&](int n,int l,vector<Obj> &v){
if(n <= 1)return;
if(n&1)n++;
int m = n>>1;
for(int i = 0;i<m;i++){
while(v.size()<=l+m+i)v.push_back(Obj());
int c = getcode();
SWAPIF(v[l+i],v[l+m+i],c);
}
apply_perm(m,l,v);
apply_perm(m,l+m,v);
for(int i = 0;i<m;i++){
int c = getcode();
SWAPIF(v[l+i],v[l+m+i],c);
}
return;
};
function<void(vector<Obj>&)> SWEEP1 = [&](vector<Obj> &v){
int x = zero;
for(auto &i:v){
vector<pii> vv;
for(int j = 0;j<NUM_LEN;j++){
int t1 = addop(i.tp,x+j,OP_AND);
int t2 = addop(i.tp,i.val+j,OP_LESS);
vv.push_back(pii(t1,t2));
}
i.val = ptr;
for(auto &i:vv)addop(i.fs,i.sc,OP_OR);
x = i.val;
}
return;
};
function<void(vector<Obj>&)> SWEEP2 = [&](vector<Obj> &v){
int x = zero;
int C = 0;
for(auto &i:v){
int sum = FULL_ADDER(x,i.val);
vector<pii> vv,xv;//vv:OP_OR;xv:OP_LESS
for(int j = 0;j<NUM_LEN;j++){
int t1 = addop(i.tp,x+j,OP_AND);
int t2 = addop(i.tp,i.val+j,OP_LESS);
vv.push_back(pii(t1,t2));
xv.push_back(pii(i.tp,sum+j));
}
i.val = ptr;
for(auto &i:vv)addop(i.fs,i.sc,OP_OR);
x = ptr;
for(auto &i:xv)addop(i.fs,i.sc,OP_LESS);
}
return;
};
vector<int> codedp(1010,0);
codedp[1] = 0;
for(int i = 2;i<1010;i++)codedp[i] = codedp[(i+1)>>1]*2+(i+1)/2*2;
int n,m;
cerr<<"getting n,m"<<endl;
for(n = 1;n*(NAME_LEN+NUM_LEN)+codedp[n] < la;n++);
for(m = 0;m*(NAME_LEN*2)+codedp[m] < lb;m++);
cerr<<"n = "<<n<<endl;
cerr<<"m = "<<m<<endl;
zero = ptr;
for(int i = 0;i<20;i++)addop(0,0,OP_ZERO);
one = ptr;
for(int i = 0;i<20;i++)addop(0,0,OP_ONE);
vector<Obj> lv,rv,v;
for(int i = 0;i<n;i++){
Obj tmp;
int len = NAME_LEN+NUM_LEN;
tmp.name1 = tmp.name2 = i*len;
tmp.tp = zero;
tmp.val = i*len+NAME_LEN;
lv.push_back(tmp);
}
cerr<<"lv init!"<<endl;
for(int i = 0;i<m;i++){
Obj tmp;
int len = NAME_LEN*2;
tmp.name1 = la+i*len;
tmp.name2 = la+i*len+NAME_LEN;
tmp.tp = one;
tmp.val = zero;
rv.push_back(tmp);
}
cerr<<"rv,init!"<<endl;
{
for(auto &i:lv){
for(int j = 0;j<NAME_LEN;j++)OUT.push_back(i.name1+j);OUT.push_back(-2);
for(int j = 0;j<NAME_LEN;j++)OUT.push_back(i.name2+j);OUT.push_back(-2);
OUT.push_back(i.tp);OUT.push_back(-2);
for(int j = 0;j<NUM_LEN;j++)OUT.push_back(i.val+j);OUT.push_back(-2);
OUT.push_back(-1);
}
OUT.push_back(-1);
for(auto &i:rv){
for(int j = 0;j<NAME_LEN;j++)OUT.push_back(i.name1+j);OUT.push_back(-2);
for(int j = 0;j<NAME_LEN;j++)OUT.push_back(i.name2+j);OUT.push_back(-2);
OUT.push_back(i.tp);OUT.push_back(-2);
for(int j = 0;j<NUM_LEN;j++)OUT.push_back(i.val+j);OUT.push_back(-2);
OUT.push_back(-1);
}
}
assert(lv.size() == n&&rv.size() == m);
v.clear();
for(auto &i:lv)v.push_back(i);
for(auto &i:rv)v.push_back(i);
while(v.size() != B)v.push_back(Obj());
bitonic_merge(0,v.size()-1,v,0);
vector<Obj> vv;
for(int i = B-n-m;i<B;i++)vv.push_back(v[i]);
SWEEP1(vv);
for(int i = 0;i<vv.size();i++)v.end()[-1-i] = vv.end()[-1-i];
undo_bitonic(v);
for(int i = 0;i<n;i++)lv[i] = v[i];
for(int i = 0;i<m;i++)rv[i] = v[i+n];
for(int i = la+m*(NAME_LEN*2);i<la+lb;i++)q.push(i);
apply_perm(m,0,rv);
rv.resize(m);
assert(q.empty());
v.clear();
for(int i = 0;i<n;i++){
lv[i].tp = addop(one,one,OP_ONE);
}
for(int i = 0;i<m;i++){
rv[i].tp = addop(zero,zero,OP_ZERO);
}
for(int i = 0;i<n;i++)v.push_back(lv[i]);
for(int i = 0;i<m;i++)v.push_back(rv[i]);
while(v.size() != B)v.push_back(Obj());
bitonic_merge(0,v.size()-1,v,1);
assert(v.size() == B);
cerr<<"BITONIC2:"<<ptr<<endl;
vv.clear();
for(int i = B-n-m;i<B;i++)vv.push_back(v[i]);
SWEEP2(vv);
cerr<<"sweep2:"<<ptr<<endl;
for(int i = 0;i<vv.size();i++)v.end()[-1-i] = vv.end()[-1-i];
undo_bitonic(v);
cerr<<"undo bitonic2:"<<ptr<<endl;
for(int i = 0;i<n;i++)lv[i] = v[i];
for(int i = 0;i<m;i++)rv[i] = v[i+n];
for(int i = n*(NAME_LEN+NUM_LEN);i<la;i++)q.push(i);
apply_perm(n,0,lv);
cerr<<"apply perm:"<<ptr<<endl;
assert(q.empty());
lv.resize(n);
for(int i = 0;i<n;i++){
for(int j = 0;j<NUM_LEN;j++){
outputs_circuit[i][j] = lv[i].val+j;
}
}
return ptr;
}
컴파일 시 표준 에러 (stderr) 메시지
abc.cpp: In function 'void PERM::encode(std::vector<int>)':
abc.cpp:66:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
66 | for(int i = 1;i<cyc.size();i++){
| ~^~~~~~~~~~~
abc.cpp:70:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
70 | for(int i = 1;i<tags.size();i+=2){
| ~^~~~~~~~~~~~
abc.cpp: In lambda function:
abc.cpp:104:14: warning: comparison of integer expressions of different signedness: 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
104 | if(s.size()>i)re += ts;
| ~~~~~~~~^~
abc.cpp: In function 'int bob(int, const char (*)[5], const char (*)[5], bool*)':
abc.cpp:169:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
169 | for(int i = 1;i<v.size();i++)assert(v[i-1].fs>=v[i].fs);
| ~^~~~~~~~~
abc.cpp:184:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
184 | for(int i = 0;i<code.size();i++){
| ~^~~~~~~~~~~~
abc.cpp: In lambda function:
abc.cpp:287:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
287 | for(int i = 0;i<pa.size();i++){//va:OP_OR;vb:OP_XOR
| ~^~~~~~~~~~
abc.cpp:298:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
298 | for(int i = 0;i<vb.size();i++)addop(vb[i].fs,oa.name1+i,OP_XOR);
| ~^~~~~~~~~~
In file included from /usr/include/c++/10/cassert:44,
from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:33,
from abc.cpp:3:
abc.cpp: In lambda function:
abc.cpp:331:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<Obj>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
331 | assert(0<=a&&a<v.size()&&0<=b&&b<v.size());
| ~^~~~~~~~~
abc.cpp:331:36: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<Obj>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
331 | assert(0<=a&&a<v.size()&&0<=b&&b<v.size());
| ~^~~~~~~~~
abc.cpp:327:7: warning: unused variable 'C' [-Wunused-variable]
327 | int C = 0;
| ^
abc.cpp: In lambda function:
abc.cpp:351:18: warning: comparison of integer expressions of different signedness: 'std::vector<Obj>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
351 | while(v.size()<=l+m+i)v.push_back(Obj());
| ~~~~~~~~^~~~~~~
abc.cpp: In lambda function:
abc.cpp:382:7: warning: unused variable 'C' [-Wunused-variable]
382 | int C = 0;
| ^
abc.cpp: In function 'int circuit(int, int, int*, int (*)[2], int (*)[16])':
abc.cpp:436:4: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
436 | for(int j = 0;j<NAME_LEN;j++)OUT.push_back(i.name1+j);OUT.push_back(-2);
| ^~~
abc.cpp:436:58: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
436 | for(int j = 0;j<NAME_LEN;j++)OUT.push_back(i.name1+j);OUT.push_back(-2);
| ^~~
abc.cpp:437:4: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
437 | for(int j = 0;j<NAME_LEN;j++)OUT.push_back(i.name2+j);OUT.push_back(-2);
| ^~~
abc.cpp:437:58: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
437 | for(int j = 0;j<NAME_LEN;j++)OUT.push_back(i.name2+j);OUT.push_back(-2);
| ^~~
abc.cpp:439:4: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
439 | for(int j = 0;j<NUM_LEN;j++)OUT.push_back(i.val+j);OUT.push_back(-2);
| ^~~
abc.cpp:439:55: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
439 | for(int j = 0;j<NUM_LEN;j++)OUT.push_back(i.val+j);OUT.push_back(-2);
| ^~~
abc.cpp:444:4: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
444 | for(int j = 0;j<NAME_LEN;j++)OUT.push_back(i.name1+j);OUT.push_back(-2);
| ^~~
abc.cpp:444:58: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
444 | for(int j = 0;j<NAME_LEN;j++)OUT.push_back(i.name1+j);OUT.push_back(-2);
| ^~~
abc.cpp:445:4: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
445 | for(int j = 0;j<NAME_LEN;j++)OUT.push_back(i.name2+j);OUT.push_back(-2);
| ^~~
abc.cpp:445:58: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
445 | for(int j = 0;j<NAME_LEN;j++)OUT.push_back(i.name2+j);OUT.push_back(-2);
| ^~~
abc.cpp:447:4: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
447 | for(int j = 0;j<NUM_LEN;j++)OUT.push_back(i.val+j);OUT.push_back(-2);
| ^~~
abc.cpp:447:55: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
447 | for(int j = 0;j<NUM_LEN;j++)OUT.push_back(i.val+j);OUT.push_back(-2);
| ^~~
In file included from /usr/include/c++/10/cassert:44,
from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:33,
from abc.cpp:3:
abc.cpp:451:19: warning: comparison of integer expressions of different signedness: 'std::vector<Obj>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
451 | assert(lv.size() == n&&rv.size() == m);
| ~~~~~~~~~~^~~~
abc.cpp:451:35: warning: comparison of integer expressions of different signedness: 'std::vector<Obj>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
451 | assert(lv.size() == n&&rv.size() == m);
| ~~~~~~~~~~^~~~
abc.cpp:461:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<Obj>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
461 | for(int i = 0;i<vv.size();i++)v.end()[-1-i] = vv.end()[-1-i];
| ~^~~~~~~~~~
abc.cpp:486:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<Obj>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
486 | for(int i = 0;i<vv.size();i++)v.end()[-1-i] = vv.end()[-1-i];
| ~^~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |