CodeForces 125D【鸽巢原理】
哇塞?开始的三个数其中两个数一定能确定一个序列。(鸽巢原理)
#include <bits/stdc++.h>
using namespace std;
typedef long long LL; const int N=3e4+10; int a[N],n;
bool vis[N]; void print(vector<int>v)
{
int sz = v.size();
for(int i=0; i<sz; i++)
printf("%d ",v[i]);
puts("");
} bool check(vector<int>v)
{
if(!v.size())
return false;
if(v.size()==1||v.size()==2) return true; int d=v[1]-v[0];
for(int i=2; i<v.size(); i++)
if(v[i]-v[i-1]!=d)
return false;
return true;
} bool solve(int l,int r)
{
vector<int>v1,v2;
memset(vis,false,sizeof(vis));
int d=a[r]-a[l];
int last=-1,get=a[l];
for(int i=1; i<=n; i++)
if(a[i]==get)
{
get+=d;
v1.push_back(a[i]);
last=i;
}
else vis[i]=1;
for(int i=1; i<=n; i++)
if(vis[i])
v2.push_back(a[i]);
if(check(v2))
{
print(v1);
print(v2);
return true;
}
vis[last]=1;
v1.pop_back();
v2.clear();
for(int i=1; i<=n; i++)
if(vis[i])
v2.push_back(a[i]);
if(check(v2))
{
print(v1);
print(v2);
return true;
}
return false;
} int main()
{
scanf("%d",&n);
for(int i=1; i<=n; i++)
scanf("%d",&a[i]);
if(n==2)
printf("%d\n%d",a[1],a[2]);
else if(!solve(1,2)&&!solve(2,3)&&!solve(1,3))
printf("No solution");
return 0;
}
CodeForces 125D【鸽巢原理】的更多相关文章
- 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 ...
- poj 2356 Find a multiple(鸽巢原理)
Description The input contains N natural (i.e. positive integer) numbers ( N <= ). Each of that n ...
随机推荐
- 单机版 JedisUtil({基本操作封装工具类})【二】
<!--集成的RedisJAR--> <!--引入jedis需的jar包--> <dependency> <groupId>redis.clients& ...
- c++能过,g++过不了
可能原因: 1. 输出double类型数据时,不能用%lf,应该用%f(详见 关于输出用%lf和%f的问题 ) double n=100; 代码1:错误 c++--------accepted g+ ...
- Sharepoint list webpart
<script type="text/javascript" src="http://code.jquery.com/jquery-1.10.0.min.js&qu ...
- Python--基础文件读写操作
1,open(),对文件进行读写操作之前,要先打开文件,获取文件的句柄: 懒人专用方法,文件打开后不用关闭 with open(r'somefile.txt','r+',encoding='utf8' ...
- linux命令学习笔记(53):route命令
Linux系统的route命令用于显示和操作IP路由表(show / manipulate the IP routing table).要实现两 个不同的子网之间的通信,需要一台连接两个网络的路由器, ...
- 实现两个窗口通信方法-postMessage
此方案可解决跨域而且跨Iframe,而且http和https之间的交互 首先来看一下基本的语法 otherWindow.postMessage(message, targetOrigin, [tran ...
- 【原创】C++实现获取本机机器名及外网IP代码
上代码: #include "stdafx.h" #include <WINSOCK2.H> #include <urlmon.h> #pragma com ...
- BurpSuite工具应用及重放攻击实验
一.BurpSuite工具介绍 BurpSuite是用于攻击web 应用程序的集成平台.它包含了许多工具,并为这些工具设计了许多接口,以促进加快攻击应用程序的过程.所有的工具都共享一个能处理并显示HT ...
- 【Google】循环字符串里面的独立子串
转载自九章算法(地址) 题目: 假设s是一个无限循环的字符串”abcdefghijklmnopqrstuvwxyz”,s就是一个”...zabcdefghijklmnopqrstuvwxyza...” ...
- 利用dynamic来提供动态方法的性能
前段时间做了一个worklist的项目,有部分是利用xml配置DICOM的tag,然后根据xml把DICOM的Dataset转为实体类,或者把实体类转为Dataset. 当中主要应用了反射来调用Dat ...