CF 342A(Xenia and Divisors-考虑有限情况)
2013-09-07 19:49
190 查看
A. Xenia and Divisors
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
Xenia the mathematician has a sequence consisting of n (n is
divisible by 3) positive integers, each of them is at most 7. She wants to split the sequence into groups of three so that for each group of three a, b, c the
following conditions held:
a < b < c;
a divides b, b divides c.
Naturally, Xenia wants each element of the sequence to belong to exactly one group of three. Thus, if the required partition exists, then it has
groups
of three.
Help Xenia, find the required partition or else say that it doesn't exist.
Input
The first line contains integer n (3 ≤ n ≤ 99999) —
the number of elements in the sequence. The next line contains n positive integers, each of them is at most 7.
It is guaranteed that n is divisible by 3.
Output
If the required partition exists, print
groups
of three. Print each group as values of the elements it contains. You should print values in increasing order. Separate the groups and integers in groups by whitespaces. If there are multiple solutions, you can print any of them.
If there is no solution, print -1.
Sample test(s)
input
output
input
output
可能的序列:
d[1].1 2 4
d[2].1 2 6
d[3].1
3 6
红色部分贪心都懂得。。。
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
Xenia the mathematician has a sequence consisting of n (n is
divisible by 3) positive integers, each of them is at most 7. She wants to split the sequence into groups of three so that for each group of three a, b, c the
following conditions held:
a < b < c;
a divides b, b divides c.
Naturally, Xenia wants each element of the sequence to belong to exactly one group of three. Thus, if the required partition exists, then it has
groups
of three.
Help Xenia, find the required partition or else say that it doesn't exist.
Input
The first line contains integer n (3 ≤ n ≤ 99999) —
the number of elements in the sequence. The next line contains n positive integers, each of them is at most 7.
It is guaranteed that n is divisible by 3.
Output
If the required partition exists, print
groups
of three. Print each group as values of the elements it contains. You should print values in increasing order. Separate the groups and integers in groups by whitespaces. If there are multiple solutions, you can print any of them.
If there is no solution, print -1.
Sample test(s)
input
6 1 1 1 2 2 2
output
-1
input
6 2 2 1 1 4 6
output
1 2 4 1 2 6
可能的序列:
d[1].1 2 4
d[2].1 2 6
d[3].1
3 6
红色部分贪心都懂得。。。
#include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #include<functional> #include<iostream> #include<cmath> #include<cctype> #include<ctime> using namespace std; #define For(i,n) for(int i=1;i<=n;i++) #define Fork(i,k,n) for(int i=k;i<=n;i++) #define Rep(i,n) for(int i=0;i<n;i++) #define ForD(i,n) for(int i=n;i;i--) #define RepD(i,n) for(int i=n;i>=0;i--) #define Forp(x) for(int p=pre[x];p;p=next[p]) #define Lson (x<<1) #define Rson ((x<<1)+1) #define MEM(a) memset(a,0,sizeof(a)); #define MEMI(a) memset(a,127,sizeof(a)); #define MEMi(a) memset(a,128,sizeof(a)); #define INF (2139062143) #define F (100000007) #define MAXN (99999+10) long long mul(long long a,long long b){return (a*b)%F;} long long add(long long a,long long b){return (a+b)%F;} long long sub(long long a,long long b){return (a-b+(a-b)/F*F+F)%F;} typedef long long ll; int n,a[MAXN]={0}; int main() { // freopen("Divisors.in","r",stdin); cin>>n; For(i,n) { int p; cin>>p; a[p]++; } if (a[5]||a[7]) {puts("-1");return 0;} static int d[4]={0}; if (a[4]) { a[1]-=a[4];a[2]-=a[4];d[1]=a[4];a[4]=0; if (a[1]<0||a[2]<0) {puts("-1");return 0;} } // For(i,7) cout<<a[i]<<' ';cout<<endl; if (a[3]) { a[1]-=a[3];a[6]-=a[3];d[3]=a[3];a[3]=0; if (a[1]<0||a[6]<0) {puts("-1");return 0;} } if (a[1]==a[2]&&a[2]==a[6]) { d[2]=a[1]; }else {puts("-1");return 0;} For(i,d[1]) puts("1 2 4"); For(i,d[2]) puts("1 2 6"); For(i,d[3]) puts("1 3 6"); return 0; }
相关文章推荐
- 输入一个整数,将这个整数以字符串的形式逆序输出 程序不考虑负数的情况,若数字含有0,则逆序形式也含有0,如输入为100,则输出为001
- 考虑主外键、索引情况下,批量修改字段长度
- 以下情况考虑将类型声明为值类型
- CF 505C(Mr. Kitayuta, the Treasure Hunter-Dp考虑可用范围)
- js实现随机选取[10,100)中的10个整数,存入一个数组,并排序。 另考虑(10,100]和[10,100]两种情况。
- 如何在有限的内存的情况下,找到大量数据中重复查询次数最多的语句
- 用字符串实现大数的相加,没有考虑存在负数的情况
- 个人的能力有限,考虑出售整个解决方案!
- 批量修改字段长度,考虑主键外键索引的情况
- hdoj Average 5353 (递推&&数学情况考虑) 好题
- poj1661-这题目简单dp但是要考虑情况比较多,wa了n次死在了自己定义的无穷大上面
- CF 1033 D. Divisors
- itoa函数,考虑当待处理整数为-2^(字长-1)的情况
- 做一个100秒的倒计时程序,注意考虑程序进入后台时的情况
- C# 获取本机IP_考虑多网卡的情况
- CF 453B(Little Pony and Harmony Chest-数列最小加减1更改方案,满足任意2数互质-位运算dp+最坏情况分析+记忆化搜索)
- c语言:求一元二次方程的跟,系数a,b,c由键盘输入(要求考虑所有情况)
- 以下题目均在bookstore项目上完成(请先运行数据库文件): 1、编写单元测试用例,对用户注册功能的Action层进行测试。(注意:测试用例应考虑成功和失败的情况)
- 考虑用静态工厂方法替代构造器的情况
- Largest Point hdoj 5461 (逻辑+分情况考虑)好题