大数跨境
0
0

「IOI2019」视觉程序

「IOI2019」视觉程序 Social Companion
2019-08-20
1
导读:参考程序#include "vision.h"#include<bits/stdc++.h>using na


参考程序

#include "vision.h"

#include<bits/stdc++.h>

using namespace std;

const int MAXN = 405;

int num[MAXN][MAXN], tot;

int pre[MAXN], suf[MAXN];

int getbool(int n, int m, int k) {

for (int i = 2; i <= n + m; i++) {

vector <int> opt; opt.clear();

for (int j = 1; j <= n; j++) {

int k = i - j;

if (k >= 1 && k <= m) opt.push_back(num[j][k]);

}

if (i != 2) opt.push_back(pre[i - 1]);

pre[i] = add_or(opt);

}

for (int i = n + m; i >= 2; i--) {

vector <int> opt; opt.clear();

for (int j = 1; j <= n; j++) {

int k = i - j;

if (k >= 1 && k <= m) opt.push_back(num[j][k]);

}

if (i != n + m) opt.push_back(suf[i + 1]);

suf[i] = add_or(opt);

}

vector <int> opt; opt.clear();

for (int i = 2, j = i + k; j <= n + m; i++, j++) {

vector <int> tmp; tmp.clear();

tmp.push_back(pre[i]), tmp.push_back(suf[j]);

opt.push_back(add_and(tmp));

}

int resa = add_or(opt);

for (int i = 1; i <= n; i++)

for (int j = 1, k = m; j <= k; j++, k--)

swap(num[i][j], num[i][k]);

for (int i = 2; i <= n + m; i++) {

vector <int> opt; opt.clear();

for (int j = 1; j <= n; j++) {

int k = i - j;

if (k >= 1 && k <= m) opt.push_back(num[j][k]);

}

if (i != 2) opt.push_back(pre[i - 1]);

pre[i] = add_or(opt);

}

for (int i = n + m; i >= 2; i--) {

vector <int> opt; opt.clear();

for (int j = 1; j <= n; j++) {

int k = i - j;

if (k >= 1 && k <= m) opt.push_back(num[j][k]);

}

if (i != n + m) opt.push_back(suf[i + 1]);

suf[i] = add_or(opt);

}

opt.clear();

for (int i = 2, j = i + k; j <= n + m; i++, j++) {

vector <int> tmp; tmp.clear();

tmp.push_back(pre[i]), tmp.push_back(suf[j]);

opt.push_back(add_and(tmp));

}

int resb = add_or(opt);

for (int i = 1; i <= n; i++)

for (int j = 1, k = m; j <= k; j++, k--)

swap(num[i][j], num[i][k]);

opt.clear();

opt.push_back(resa), opt.push_back(resb);

return add_or(opt);

}

void construct_network(int n, int m, int k) {

for (int i = 1; i <= n; i++)

for (int j = 1; j <= m; j++)

num[i][j] = tot++;

if (k == n + m - 2) {

getbool(n, m, k);

return;

}

int greater = getbool(n, m, k + 1);

int geq = getbool(n, m, k);

int ngr = add_not(greater);

vector <int> opt; opt.clear();

opt.push_back(geq), opt.push_back(ngr);

add_and(opt);

}


【声明】内容源于网络
0
0
Social Companion
信息科技教学,个人思考随感的在线记事本
内容 791
粉丝 0
Social Companion 信息科技教学,个人思考随感的在线记事本
总阅读117
粉丝0
内容791