概述
题目链接
题意:给出a,b,c分别表示沿着z轴,y轴,x轴能看到的立体小方块的数目(每个都是1×1×1的),若存在一种在这个三位空间的放置方法使得a,b,c存在,那么输入容易一种情况的个数和每个小立方体离(0,0,0)最近点的坐标,否则输出-1.
题解:这里没有推导过程,只有多次尝试后得到的一种方便的放置方案,就是在a,b,c最大值所对的平面打斜着放置先(eg:题目给出那组样例a=4,b=3,c=5,那么就是在下图这个二维平面来放置,先打斜着放三个黄色的(因为min(a,b)=3),然后由于a还差一,因此再从绿色那个方块位置开始放,一直向左直到a=4,剩下的就是在a*b的这个二维平面白色部分随便放置即可,直道c=5,那么从这里就可以发现-1的情况就是a*b<c (a<=b<=c).(由于实力不足,旋转绕的有点晕,所以输出直接暴力做了,知道规律就可以自己做了哈~)
代码如下:
#include<cstdio>
#include<algorithm>
#include<vector>
#include<queue>
#include<string>
#include<cstring>
#include<iostream>
using namespace std;
#define ll long long
const int maxn = 1e5 + 500;
struct node {
int x, id;
}a[5];
int mark[200][200];
bool cmp(node xx, node yy) {
return xx.x < yy.x;
}
int main() {
while (~scanf("%d%d%d", &a[0].x, &a[1].x, &a[2].x)) {
a[0].id = 0, a[1].id = 1, a[2].id = 2;//记录下标
memset(mark, 0, sizeof(mark));
sort(a, a + 3,cmp);
if (a[0].x*a[1].x < a[2].x) {
printf("-1n"); continue;
}
else printf("%dn",a[2].x);
int k;
if (a[2].id == 2) {
if (a[1].id == 1)k = 1;
else k = 2;
}
else if (a[2].id == 1) {
if (a[1].id == 2)k = 3;
else k = 4;
}
else {
if (a[1].id == 2)k = 5;
else k = 6;
}
int aa = a[0].x, bb = a[1].x, cc = a[2].x, cnt = a[2].x;
for (int i = 1; i <= aa; i++) {
if (k == 1 || k == 2)printf("1 %d %dn", i, i);
else if(k==3||k==4)printf("%d 1 %dn", i, i);
else printf("%d %d 1n", i, i);
mark[i][i] = 1;
}
for (int i = aa + 1; i <= bb; i++) {
if (k == 1) printf("1 %d %dn", aa, i), mark[aa][i] = 1;
else if(k==2) printf("1 %d %dn", i, aa), mark[i][aa] = 1;
else if(k==3)printf("%d 1 %dn", aa, i), mark[aa][i] = 1;
else if (k == 4)printf("%d 1 %dn", i, aa), mark[i][aa] = 1;
else if (k == 5)printf("%d %d 1n", aa, i), mark[aa][i] = 1;
else printf("%d %d 1n", i, aa), mark[i][aa] = 1;
}
cnt -= bb;
for(int i=1;i<=aa;i++)
for(int j=1;j<=bb;j++)
if (cnt && !mark[i][j]) {
if (k == 1) printf("1 %d %dn", i, j);
else if (k == 2) printf("1 %d %dn", j, i);
else if (k == 3)printf("%d 1 %dn", i, j);
else if (k == 4)printf("%d 1 %dn", j, i);
else if (k == 5)printf("%d %d 1n", i, j);
else printf("%d %d 1n", j, i);
cnt--;
}
}
return 0;
}
最后
以上就是贤惠钢铁侠为你收集整理的Gym 101630D Designing the Toy (暴力+找规律)的全部内容,希望文章能够帮你解决Gym 101630D Designing the Toy (暴力+找规律)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复