A. 钝角三角形
单点时限: 3.0 sec
内存限制: 512 MB
QQ 小方以前不会判断钝角三角形,现在他会了,所以他急切的想教会你。
如果三角形的三边长分别为 a, b, c (a≤b≤c),那么当满足 a2+b2<c2 且 a+b>c 的时候,这个三角形就是一个由三边长为 a, b, c 构成的钝角三角形。
单单讲给你听肯定是不够的,为了表现自己,QQ 小方现在要考考你。
现在 QQ 小方会给你一个包含 3n 个整数的集合,分别是 {2,3,4,?3n,3n+1} ,他想让你将这个集合里面的数分成 n 组,保证每个数都被分到其中一个组,并且每个组恰好有 3 个数。当然,你要保证每组的 3 个数作为边长所构成的三角形是一个钝角三角形。
输入格式
输入仅包含一行一个整数 n (1≤n≤106)。
输出格式
输出应该包含 n 行,每行三个整数,表示分组。
应该满足题目所给的分组要求。
如果有多个可能的解,输出任意一个解。
如果不存在这样的解,请输出 −1。
样例
input
1
output
2 3 4
思路:将所给的数字按大小分成三组,第一个数字从第一组选,其他两个数字按奇偶从另外两个数组选。
例:n=4 ,{2,3,4,5} {6,7,8,9} {10,11,12,13} => {2,7,8} {3,11,12} {4,6,9} {5,10,13}
代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=1e4+5; 4 #define db double 5 const db eps=1e-8; 6 7 int main() 8 { 9 int n; 10 cin>>n; 11 if(n==1) puts("2 3 4"); 12 else if(n==2) puts("2 4 5"),puts("3 6 7"); 13 else 14 { 15 int m=n+1; 16 if(n&1) printf("%d %d %d\n",n+1,2*n+1,3*n+1),m--; 17 for(int i=2;i<=m;i++){ 18 if(i&1) printf("%d %d %d\n",m+3-i,2*n+1+i/2,2*n+(m+1-i/2)); 19 else printf("%d %d %d\n",m+1-i,n+1+i/2,n+1+(m-i/2)); 20 } 21 } 22 }
原文地址:https://www.cnblogs.com/mj-liylho/p/10590371.html
时间: 2024-10-11 14:25:37