【SPOJ-YELBRICK】The Yellow Brick Road【GCD】
2016-02-21 19:27
387 查看
题意:
给出n个长方体,要割出相同大小的正方体,并使得正方体的个数尽可能小。所有的长方体必须用上,且不能丢弃材料。
个数尽可能少就是让边长尽可能大。
因为要整除所有的边,那么显然对所有的长方体的长宽高取gcd就好了。
算的时候注意开LL。
给出n个长方体,要割出相同大小的正方体,并使得正方体的个数尽可能小。所有的长方体必须用上,且不能丢弃材料。
个数尽可能少就是让边长尽可能大。
因为要整除所有的边,那么显然对所有的长方体的长宽高取gcd就好了。
算的时候注意开LL。
#include <cstdio> typedef long long LL; const int maxn = 1005; int n, num[maxn][3]; inline int iread() { int f = 1, x = 0; char ch = getchar(); for(; ch < '0' || ch > '9'; ch = getchar()) f = ch == '-' ? -1 : 1; for(; ch >= '0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0'; return f * x; } inline int gcd(int a, int b) { for(; b; b ^= a ^= b ^= a %= b); return a; } int main() { while(1) { n = iread(); if(n == 0) break; num[1][0] = iread(); num[1][1] = iread(); num[1][2] = iread(); int len = gcd(num[1][0], gcd(num[1][1], num[1][2])); for(int i = 2; i <= n; i++) { num[i][0] = iread(); num[i][1] = iread(); num[i][2] = iread(); len = gcd(len, gcd(num[i][0], gcd(num[i][1], num[i][2]))); } LL ans = 0; for(int i = 1; i <= n; i++) ans += (LL) num[i][0] / len * num[i][1] / len * num[i][2] / len; printf("%lld\n", ans); } return 0; }
相关文章推荐
- JQuery问题总结--持续更新
- 设计模式(1)---简单工厂模式
- ubuntu pastebin
- 问卷调查
- UML的基本图(一)
- 构建下一代服务载体,智能设备这座宝藏该怎么挖?
- jsp继续学习
- Android笔记---四大组件之Service服务详解
- Oracle 创建数据库以及数据库备份
- 实现Swipe View
- 错误 127 error LNK2026解决方法
- 定时器精度
- html的meta总结,html标签中meta属性使用介绍
- os_pend_multi.c
- 第三次作业之Calculator项目随笔
- Android JNI开发笔记
- 网络请求库
- ArrayList集合
- os_int.c
- 67. Add Binary