Codeforces Round #440 (Div. 2) C. Maximum splitting
来源:互联网 发布:sql身份证 编辑:程序博客网 时间:2024/05/18 15:54
C. Maximum splitting
Problem Statement
You are given several queries. In the i-th query you are given a single positive integer
ni . You are to representni as a sum of maximum possible number of composite summands and print this maximum number, or print -1, if there are no such splittings.
An integer greater than 1 is composite, if it is not prime, i.e. if it has positive divisors not equal to 1 and the integer itself.
Input
The first line contains single integer q (1 ≤ q ≤
105 ) — the number of queries.
q lines follow. The (i + 1)-th line contains single integer ni (1 ≤ ni ≤109 ) — the i-th query.
Output
For each query print the maximum possible number of summands in a valid splitting to composite summands, or -1, if there are no such splittings.
Examples
Example 1
Input
1
12
Output
3
Example 2
Input
2
6
8
Output
1
2
Example 3
Input
3
1
2
3
Output
-1
-1
-1
Note
12 = 4 + 4 + 4 = 4 + 8 = 6 + 6 = 12, but the first splitting has the maximum possible number of summands.
8 = 4 + 4, 6 can’t be split into several composite summands.
1, 2, 3 are less than any composite number, so they do not have valid splittings.
题意
给出一个数,将这个数分成若干个合数的和,求最多能分成多少个合数
思路
对于一个数,我们可以将它按照mod 4的意义下分类讨论:
0 : 直接分成若干个4,ans = n / 4;
1 : 提出一个9(模4余1意义下最小合数),剩下的分成若干个4,ans = (n - 9) / 4 + 1
2 : 提出一个6(模4余2意义下最小合数),剩下的分成若干个4,ans = (n - 6) / 4 + 1
3 : 提出一个15(模4余3意义下最小合数),剩下的分成若干个4,ans = (n - 15) / 4 + 2
Code
#pragma GCC optimize(3)#include<bits/stdc++.h>using namespace std;typedef long long ll;inline void readInt(int &x) { x=0;int f=1;char ch=getchar(); while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();} while(isdigit(ch))x=x*10+ch-'0',ch=getchar(); x*=f;}inline void readLong(ll &x) { x=0;int f=1;char ch=getchar(); while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();} while(isdigit(ch))x=x*10+ch-'0',ch=getchar(); x*=f;}/*================Header Template==============*/int n,k;int main() { cin>>n; while(n--) { cin>>k; if(k==1||k==2||k==3||k==5||k==7||k==11) { puts("-1"); continue; } if(k%4==0) { printf("%d\n",k/4); continue; } if(k%4==1) { printf("%d\n",(k-9)/4+1); continue; } if(k%4==2) { printf("%d\n",k/4); continue; } if(k%4==3) { printf("%d\n",(k-9)/4+1); continue; } }}
- 【Codeforces Round #440 (Div. 2) C】 Maximum splitting
- Codeforces Round #440 (Div. 2)C. Maximum splitting
- Codeforces Round #440 (Div. 2) C. Maximum splitting
- Codeforces Round #440 (Div. 2,)-数学&规律- Maximum splitting
- Codeforces Round #440 div2 C. Maximum splitting
- Codeforces Round #440 C. Maximum splitting
- Codeforces Round #440 (Div. 1) A. Maximum splitting
- C. Maximum splitting--codeforces
- codeforces 870C Maximum splitting
- codeforces 870C. Maximum splitting
- CodeForces 872C Maximum splitting
- A. Lesha and array splitting Codeforces Round #390 (Div. 2)
- Codeforces Round #390 (Div. 2)A Lesha and array splitting
- [Codeforces Round #452 (Div. 2)] Splitting in Teams
- Codeforces Round #124 (Div. 2) / C. Lexicographically Maximum Subsequence
- Codeforces Round #205 (Div. 2) C. Find Maximum
- Codeforces Round #205 (Div. 2) / 353C Find Maximum (贪心)
- Codeforces 872 C Maximum splitting(规律)
- 去掉chrome记住密码后的默认填充样式
- (M)BFS:103. Binary Tree Zigzag Level Order Traversal
- Ionic 组件使用方法
- 前端开发环境
- POJ 2481 Cows 树状数组
- Codeforces Round #440 (Div. 2) C. Maximum splitting
- 搭建VPN
- 方法
- 三角形
- NS3中的Ptr类
- 你的网站“人物同检”了吗?
- DFS搜索+剪枝
- 数据结构实验之链表一:顺序建立链表
- 在win10下安装mysql5.7常见错误解决