This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <vector>
#include <string>
#include <map>
using namespace std;
int add_and(std::vector<int> Ns);
int add_or(std::vector<int> Ns);
int add_xor(std::vector<int> Ns);
int add_not(int N);
bool vis[202][202];
int k,h,w;
int f(int i,int j)
{
return (i*w)+j;
}
vector<int> val;
map<vector<int>,bool> done;
int px=-1,py=-1;
void dfs(int i,int j)
{
// cout<<"At "<<i<<' '<<j<<endl;
vis[i][j]=1;
int ox=px;
int oy=py;
px=i;
py=j;
vector<int> val_orz;
for(int fp=-k;fp<=k;fp++)
{
int rem=k-abs(fp);
if(0<=(i+fp) and (i+fp)<h and 0<=(j+rem) and (j+rem)<w)
{
if(!done[{f(i,j),f(i+fp,j+rem)}])
{
done[{f(i,j),f(i+fp,j+rem)}]=1;
done[{f(i+fp,j+rem),f(i,j)}]=1;
val_orz.push_back(f(i+fp,j+rem));
}
if(!vis[i+fp][j+rem])
dfs(i+fp,j+rem);
}
rem*=-1;
if(0<=(i+fp) and (i+fp)<h and 0<=(j+rem) and (j+rem)<w)
{
if(!done[{f(i,j),f(i+fp,j+rem)}])
{
done[{f(i,j),f(i+fp,j+rem)}]=1;
done[{f(i+fp,j+rem),f(i,j)}]=1;
val_orz.push_back(f(i+fp,j+rem));
}
if(!vis[i+fp][j+rem])
dfs(i+fp,j+rem);
}
}
if(val_orz.size()>0)
{
val.push_back(add_and({f(i,j),add_or(val_orz)}));
}
px=ox;
py=oy;
}
void construct_network(int H, int W, int K)
{
k=K;
h=H;
w=W;
for(int i=0;i<H;i++)
{
for(int j=0;j<W;j++)
{
if(!vis[i][j])
{
dfs(i,j);
}
}
}
add_or(val);
}
# | 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... |