Codeforces 464B. Restore Cube
2014-09-09 11:24
453 查看
暴力+枚举点用边长关系判断立方体
B. Restore Cube
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
Peter had a cube with non-zero length of a side. He put the cube into three-dimensional space in such a way that its vertices lay at integer points (it is possible that the cube's sides are not parallel to the coordinate axes). Then he took a piece of paper
and wrote down eight lines, each containing three integers — coordinates of cube's vertex (a single line contains coordinates of a single vertex, each vertex is written exactly once), put the paper on the table and left. While Peter was away, his little brother
Nick decided to play with the numbers on the paper. In one operation Nick could swap some numbers inside a single line (Nick didn't swap numbers from distinct lines). Nick could have performed
any number of such operations.
When Peter returned and found out about Nick's mischief, he started recollecting the original coordinates. Help Peter restore the original position of the points or else state that this is impossible and the numbers were initially recorded incorrectly.
Input
Each of the eight lines contains three space-separated integers — the numbers written on the piece of paper after Nick's mischief. All numbers do not exceed 106 in
their absolute value.
Output
If there is a way to restore the cube, then print in the first line "YES". In each of the next eight lines print three integers — the restored coordinates of
the points. The numbers in the i-th output line must be a permutation of the numbers in i-th
input line. The numbers should represent the vertices of a cube with non-zero length of a side. If there are multiple possible ways, print any of them.
If there is no valid way, print "NO" (without the quotes) in the first line. Do not print anything else.
Sample test(s)
input
output
input
output
B. Restore Cube
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
Peter had a cube with non-zero length of a side. He put the cube into three-dimensional space in such a way that its vertices lay at integer points (it is possible that the cube's sides are not parallel to the coordinate axes). Then he took a piece of paper
and wrote down eight lines, each containing three integers — coordinates of cube's vertex (a single line contains coordinates of a single vertex, each vertex is written exactly once), put the paper on the table and left. While Peter was away, his little brother
Nick decided to play with the numbers on the paper. In one operation Nick could swap some numbers inside a single line (Nick didn't swap numbers from distinct lines). Nick could have performed
any number of such operations.
When Peter returned and found out about Nick's mischief, he started recollecting the original coordinates. Help Peter restore the original position of the points or else state that this is impossible and the numbers were initially recorded incorrectly.
Input
Each of the eight lines contains three space-separated integers — the numbers written on the piece of paper after Nick's mischief. All numbers do not exceed 106 in
their absolute value.
Output
If there is a way to restore the cube, then print in the first line "YES". In each of the next eight lines print three integers — the restored coordinates of
the points. The numbers in the i-th output line must be a permutation of the numbers in i-th
input line. The numbers should represent the vertices of a cube with non-zero length of a side. If there are multiple possible ways, print any of them.
If there is no valid way, print "NO" (without the quotes) in the first line. Do not print anything else.
Sample test(s)
input
0 0 0 0 0 1 0 0 1 0 0 1 0 1 1 0 1 1 0 1 1 1 1 1
output
YES 0 0 0 0 0 1 0 1 0 1 0 0 0 1 1 1 0 1 1 1 0 1 1 1
input
0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
output
NO
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long long int LL; LL a[8][3]; LL ta[8][3]; LL sig[8][3]; LL SQ(LL x) { return x*x; } LL Dist(int u,int v) { return SQ(ta[u][0]-ta[v][0])+SQ(ta[u][1]-ta[v][1])+SQ(ta[u][2]-ta[v][2]); } bool check() { for(int yuan=0;yuan<8;yuan++) { LL dist[8]; int nd=0; for(int i=0;i<8;i++) { if(i==yuan) continue; dist[nd++]=Dist(yuan,i); } sort(dist,dist+7); if(dist[0]==0LL) return false; if(dist[0]!=dist[1]||dist[0]!=dist[2]||dist[1]!=dist[2]) return false; if(dist[3]!=dist[4]||dist[3]!=dist[5]||dist[4]!=dist[5]) return false; if(dist[0]*2!=dist[3]) return false; if(dist[0]*3!=dist[6]) return false; } return true; } int main() { for(int i=0;i<8;i++) for(int j=0;j<3;j++) { cin>>a[i][j]; sig[i][j]=j; } do { do { do { do { do { do { do { do { for(int i=0;i<8;i++) { for(int j=0;j<3;j++) { ta[i][j]=a[i][sig[i][j]]; } } if(check()) { puts("YES"); for(int i=0;i<8;i++) { for(int j=0;j<3;j++) cout<<ta[i][j]<<" "; cout<<endl; } return 0; } }while( next_permutation(sig[7],sig[7]+3) ); }while( next_permutation(sig[6],sig[6]+3) ); }while( next_permutation(sig[5],sig[5]+3) ); }while( next_permutation(sig[4],sig[4]+3) ); }while( next_permutation(sig[3],sig[3]+3) ); }while( next_permutation(sig[2],sig[2]+3) ); }while( next_permutation(sig[1],sig[1]+3) ); }while( next_permutation(sig[0],sig[0]+3) ); puts("NO"); return 0; }
相关文章推荐
- codeforces 258B Little Elephant and Elections 数位DP+DFS
- CodeForces 534F Simplified Nonogram (记忆化搜索)
- Codeforces 6225B KMP
- Codeforces 115A. Party
- CodeForces - 729D(思路)
- CodeForces 158 A.Next Round(水~)
- CodeForces-884D:Boxes And Balls(合并石子)
- codeforces 166?
- Codeforces 492E Vanya and Field(拓展欧几里得)
- Codeforces 653C Bear and Up-Down 【模拟】
- Codeforces 707D.Persistent Bookcase(离线算法,dfs树,好题!)
- CodeForces 776D The Door Problem【并查集】
- CodeForces 22b_Bargaining Table_dp(暴力)
- codeforces 82A Double Cola
- [代码]codeforces 274B Zero Tree
- 【贪心】Codeforces 353E Antichain
- codeforces 598C C. Nearest vectors(极角排序)
- Codeforces- 124B-Permutations (深搜找全排列以及取出一个数的每一位)
- Codeforces 583C GCD Table【贪心】
- CodeForces - 822C Hacker, pack your bags!(区间端点处理技巧+思维)