Two progressions(CodeForces-125D)【鸽巢原理】
题意:将一列数划分为两个等差数列。
思路:首先,我要吹爆鸽巢原理!!!真的很强大的东西!!!
加入能完成题设操作,则前三个数中,必有至少两个数在同一序列,枚举三种情况(a1 a2,a2 a3,a1 a3分别为等差数列的前两项)。
注:枚举情况时,如果操作失败,则将已成功生成的等差数列末项划分到另一个数列试试。(稍作思考即可)
代码如下:
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int n,arr[],book[]; bool judge(){
int ps,gap;
int t1=,t2;
while(t1<=n&&book[t1]) t1++;
t2=t1+;
if(t1>n)
return false;
while(t2<=n&&book[t2]) t2++;
if(t2>n)
return true;
gap=arr[t2]-arr[t1];
ps=t2;
for(int i=t2+;i<=n;i++)
if(!book[i]){
if(arr[i]-arr[ps]==gap)
ps=i;
else
return false;
}
return true;
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d",&arr[i]);
if(n==)
printf("%d\n%d",arr[],arr[]);
else {
int x[]={arr[]-arr[],arr[]-arr[],arr[]-arr[]};
int flag=;
for(int i=;i<;i++){
int st=,tmp=arr[];
memset(book,,sizeof(book));
if(i==){
book[]=book[]=;
st=;
tmp=arr[];
}
else if(i==)
book[]=book[]=;
else
book[]=book[]=;
for(int ii=st;ii<=n;ii++)
if(arr[ii]==tmp+x[i]){
book[ii]=;
tmp=arr[ii];
}
if(judge()){
flag=;
break;
}
else {
int p=n;
while(!book[p])
p--;
book[p]=;
if(judge()){
flag=;
break;
}
}
}
if(flag){
for(int i=;i<=n;i++)
if(book[i])
printf("%d ",arr[i]);
printf("\n");
for(int i=;i<=n;i++)
if(!book[i])
printf("%d ",arr[i]);
}
else printf("No solution");
}
return ;
}
By xxmlala
Two progressions(CodeForces-125D)【鸽巢原理】的更多相关文章
- CodeForces 125D【鸽巢原理】
哇塞?开始的三个数其中两个数一定能确定一个序列.(鸽巢原理) #include <bits/stdc++.h> using namespace std; typedef long long ...
- Codeforces Round #648 (Div. 2) E. Maximum Subsequence Value(鸽巢原理)
题目链接:https://codeforces.com/problemset/problem/1365/E 题意 有 $n$ 个元素,定义大小为 $k$ 的集合值为 $\sum2^i$,其中,若集合内 ...
- Codeforces.618F.Double Knapsack(构造 鸽巢原理)
题目链接 \(Description\) 给定两个大小为\(n\)的可重集合\(A,B\),集合中的元素都在\([1,n]\)内.你需要从这两个集合中各选一个非空子集,使它们的和相等.输出方案. \( ...
- Codeforces 1188C DP 鸽巢原理
题意:定义一个序列的beauty值为序列中元素之差绝对值的最小值,现在给你一个数组,问所有长度为k的子序列的beauty值的和是多少? 思路:(官方题解)我们先解决这个问题的子问题:我们可以求出bea ...
- ACM数论之旅14---抽屉原理,鸽巢原理,球盒原理(叫法不一又有什么关系呢╮(╯▽╰)╭)
这章没有什么算法可言,单纯的你懂了原理后会不会运用(反正我基本没怎么用过 ̄ 3 ̄) 有366人,那么至少有两人同一天出生(好孩子就不要在意闰年啦( ̄▽ ̄")) 有13人,那么至少有两人同一月 ...
- Wunder Fund Round 2016 (Div. 1 + Div. 2 combined) F. Double Knapsack 鸽巢原理 构造
F. Double Knapsack 题目连接: http://www.codeforces.com/contest/618/problem/F Description You are given t ...
- POJ 3370. Halloween treats 抽屉原理 / 鸽巢原理
Halloween treats Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 7644 Accepted: 2798 ...
- POJ 2356. Find a multiple 抽屉原理 / 鸽巢原理
Find a multiple Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7192 Accepted: 3138 ...
- cf319.B. Modulo Sum(dp && 鸽巢原理 && 同余模)
B. Modulo Sum time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
随机推荐
- 数据结构实验之栈与队列二:一般算术表达式转换成后缀式(SDUT 2132)
题目链接 #include <bits/stdc++.h> using namespace std; typedef long long ll; int ok(char ch, char ...
- Ubuntu14.04 支持 exFat 格式操作
推荐u盘使用exfat格式,为什么呢?两个原因: 1.三大主流操作系统(Linux.Mac.Windows)都支持exfat格式.2.exfat支持大于4G的文件. 在ubuntu下,由于版权的原因( ...
- c++ 容器反转
// reverse algorithm example #include <iostream> // std::cout #include <algorithm> // st ...
- @Configuration,@ConfigurationProperties,@EnableConfigurationProperties
@Configuration API: https://www.javadoc.io/doc/org.springframework/spring-context/5.0.7.RELEASE @Con ...
- 如何把Java的double类型变量保留两位小数
已知 双精度标量 f, 如果想以字符串形式输出,小数点后保留2位,可直接通过C语言的输出格式,System.out.printf("%.2f", f), 达到目的. 如果想要先转 ...
- Qt:使用Model-View,动态的加载显示数据
共有 main.cpp, Widget.h, Widget.cpp, Widget.ui, MyModel.h, MyModel.cpp 六个文件. 可从此下载整个工程文件: /Files/biao/ ...
- 修改ssh连上默认目录
vi /etc/passwd ssh连接linux服务器只显示-bash-4.1#不显示路径时,我们只需要修改 ~/.bash_profile文件,如果不存在这个文件,那么新建一个,增加内容 ex ...
- 进程 | 线程 | 当Linux多线程遭遇Linux多进程
背景 本文并不是介绍Linux多进程多线程编程的科普文,如果希望系统学习Linux编程,可以看[<Unix环境高级编程>第3版] 本文是描述多进程多线程编程中遇到过的一个坑,并从内核角度分 ...
- 数据分析 - Power BI
BI 目的 单表的展示有限很多的时候只能体现现象, 仅仅进行监控级别没问题 但是就数据分析而言实在不够用, 大部分的事情需要多表多图展示才可以通过现象深入挖掘诱因 BI 安装 这里使用 microso ...
- 自定义Camera的setPictureSize拍照完毕出现花屏怎么解决
Camera.Parameters parameters = mCamera.getParameters();// 获得相机参数 List<Camera.Size> sizes = par ...