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 ...
随机推荐
- 自制 yum 源仓库
转自:https://www.cnblogs.com/marility/p/7278374.html 背景 客户服务器为内网机器,centos7系统,且无法与外网连接.需要部署对应的LANMP环境及其 ...
- speech-to-text-wavenet
docker pull buriburisuri/speech-to-text-wavenet docker run -it buriburisuri/speech-to-text-wavenet p ...
- Docker容器数据券
1.是什么? 2.能干嘛? 3.数据卷 ——容器内添加 方式一:直接命令添加 1).命令 2).在宿主机上新建并添加内容 3).查看容器内相应共享文件夹,发现宿主机的文件夹下发生变化,会同步到容器内的 ...
- Flask-login 原理
1 login_required 内部原理,主要是判断当前用户是否已经授权访问,如果没被授权就调用current_app.login_manager.unauthorized() current_us ...
- jinja2-模版简介
一 简介 在Flask中,调用render_template来对模版进行渲染,使用render_template,只需要导入这个API就可以,from flask import render_temp ...
- docker实战之通过nginx镜像来部署静态页
本章我们主要讲解如何通过docker构建一个nginx容器,这里我们以部署一个静态html为素材来进行演示. 首先我们通过[docker search nginx]命令来查找Docker Hub上的n ...
- Java实现线程的三种方式和区别
Java实现线程的三种方式和区别 Java实现线程的三种方式: 继承Thread 实现Runnable接口 实现Callable接口 区别: 第一种方式继承Thread就不能继承其他类了,后面两种可以 ...
- Memcached与Memcache区别
在写这篇文章之前一直对memcache .memcached模糊,相差一个字母,特此总结下: Memcache是什么? Memcache是一个自由和开放源代码.高性能.分配的内存对象缓存系统.用于加速 ...
- idea 拉取git新分支
前面的话: 一不小心,删除了dev的分支,没办法.头头重新克隆了下,但是发现idea的右下角并没有啊,我记得之前遇到过一次 但还是忘记如何操作了,在这记录下,省的下次还得去百度 选中项目-git-fe ...
- [java]借助java.io.File类,完成文件批量改名
列出某目录下的所有文件,将文件改名,借助java.io.File一个类就可以完成.大家可以发现,代码中的具体方法都是File一个类的. 另外要注意的是,File的全路径名,路径是一致的,父路径其实是文 ...