【codeforces】 464B Restore Cube

来源:互联网 发布:jsp 收费系统 源码 编辑:程序博客网 时间:2024/05/01 13:15

暴力。。。然后判断是否为立方体时。。。先求出中心,然后通过经过中心的所有边的长度是否相等来判断是否为立方体。。。

#include <iostream>  #include <queue>  #include <stack>  #include <map>  #include <set>  #include <bitset>  #include <cstdio>  #include <algorithm>  #include <cstring>  #include <climits>  #include <cstdlib>#include <cmath>#include <time.h>#define maxn 400005#define maxm 400005#define eps 1e-10#define mod 1000000007#define INF 999999999#define lowbit(x) (x&(-x))#define mp mark_pair#define ls o<<1#define rs o<<1 | 1#define lson o<<1, L, mid  #define rson o<<1 | 1, mid+1, R  //typedef vector<int>::iterator IT;typedef long long LL;//typedef int LL;using namespace std;LL qpow(LL a, LL b){LL res=1,base=a;while(b){if(b%2)res=res*base;base=base*base;b/=2;}return res;}LL powmod(LL a, LL b){LL res=1,base=a;while(b){if(b%2)res=res*base%mod;base=base*base%mod;b/=2;}return res;}void scanf(int &__x){__x=0;char __ch=getchar();while(__ch==' '||__ch=='\n')__ch=getchar();while(__ch>='0'&&__ch<='9')__x=__x*10+__ch-'0',__ch = getchar();}LL gcd(LL _a, LL _b){if(!_b) return _a;else return gcd(_b, _a%_b);}// headint a[10], b[10], c[10], ok;bool check(void){int aa, bb, cc;aa = bb = cc = 0;for(int i = 1; i <= 8; i++) aa += a[i], bb += b[i], cc += c[i];if(aa%4 || bb%4 || cc%4) return false;aa /= 4, bb /= 4, cc /= 4;LL t = 0;for(int i = 1; i <= 8; i++) {int flag = 1;LL tt;for(int j = 1; j <= 8 && flag; j++)if(a[i] + a[j] == aa && b[i] + b[j] == bb && c[i] + c[j] == cc) {flag = 0;tt = (LL)(a[j] - a[i])*(a[j] - a[i]) + (LL)(b[j] - b[i])*(b[j] - b[i]) + (LL)(c[j] - c[i])*(c[j] - c[i]);}if(flag) return false;if(!t) t = tt;else if(t != tt) return false;}return true;}bool safe(void){for(int i = 1; i <= 8; i++)for(int j = i+1; j <= 8; j++)if(a[i] == a[j] && b[i] == b[j] && c[i] == c[j]) return false;return true;}void dfs(int now){if(now == 9) {if(safe() && check()) ok = 0;return;}for(int i = 1; i <= 6 && ok; i++)if(i%2 == 1) swap(b[now], c[now]), dfs(now+1);else swap(a[now], b[now]), dfs(now+1);}int main(void){for(int i = 1; i <= 8; i++) scanf("%d%d%d", &a[i], &b[i], &c[i]);ok = 1, dfs(1);if(ok) printf("NO\n");else {printf("YES\n");for(int i = 1; i <= 8; i++) printf("%d %d %d\n", a[i], b[i], c[i]);}return 0;}


0 0
原创粉丝点击