poj 1868 Antiarithmetic? 判断序列中是否有等差子序列

#include<iostream>
using namespace std;
const int maxN=10024;
int n,vis[maxN],a[maxN];

bool find()
{
	memset(vis,-1,sizeof(vis));
	for(int i=0;i<n;++i){
		for(int j=0;j<i;++j){
			int t=2*a[i]-a[j];
			if(t>=0&&t<n&&vis[t]==-1)
				return true;
		}
		vis[a[i]]=1;
	}
	return false;
}

int main()
{
	while(scanf("%d",&n)==1&&n){
		scanf("%*c");
		for(int i=0;i<n;++i)
			scanf("%d",&a[i]);
		if(find())
			puts("no");
		else
			puts("yes");
	}
	return 0;
} 

时间: 2024-11-03 21:04:21

poj 1868 Antiarithmetic? 判断序列中是否有等差子序列的相关文章

poj 1868 Antiarithmetic? 推断序列中是否有等差子序列

#include<iostream> using namespace std; const int maxN=10024; int n,vis[maxN],a[maxN]; bool find() { memset(vis,-1,sizeof(vis)); for(int i=0;i<n;++i){ for(int j=0;j<i;++j){ int t=2*a[i]-a[j]; if(t>=0&&t<n&&vis[t]==-1) ret

poj 1659 Frogs&#39; Neighborhood (Havel-Hakimi定理,判断序列是否可图)

链接:poj 1659 中文题不必解释题意... 其实质是给定一个度序列,判断是否可图, 若可图,输出YES,并输出各顶点之间的连边的情况 否则,输出NO 思路:判断一个序列是否可图,直接利用Havel-Hakimi定理即可 判断任意一个序列是否可图的具体过程: (1)先将序列由大到小排序 (2)设最大的度数为 t ,将最大项删除,然后把最大度数后 (不包括自己)的 t 个度数分别减1(意思就是把度数最大的点与后几个点连边) (3)重复上述两步,如果最大度数t超过了剩下顶点的个数, 或者序列中出

判断序列是否是二叉树的后序遍历序列

这个题的意思就是给定一个序列,判断这个序列是否是某个二叉排序树的后序遍历序列,这个算法的方法主要是根据后序遍历的性质,首先这个序列的最后一个元素肯定是根元素,然后将序列从左往右遍历,找到第一个大于根元素的点,这个点左边的肯定是当前根的左子树,这个点的右边肯定是当前根的右子树,继续向后遍历,看右子树中是否有值小于根,如果有,则false,否则分左右子树分别再次调用函数进行判断.具体代码如下: 1 public class IsLastOrder{ 2 3 public boolean islast

序列中的交换问题

一.逆序对系列问题 题目:http://poj.org/problem?id=1804 题意:给定一个序列a[],每次只允许交换相邻两个数,最少要交换多少次才能把它变成非递降序列. 求逆序对的裸题. 如果我们交换相邻两个数,我们逆序对的个数只能是+1或-1 我们现在需要得到一个非递减数列,即消去所有逆序对, 而我们需要最少交换次数,即统计原数组中逆序对个数. 对于一个序列中,有Ai>Aj,i<j的两个元素,我们把这个二元组称为逆序对 有常见的三种方法求逆序对 1.n^2的冒泡 2.树状数组 可

拓扑排序,判断有向图中是否有环

[原创] 今天我们来聊聊有向图中环的判断,在数据结构中我们知道,通过拓扑排序可以判断有向图中是否存在环,对于有向图的存储我们采用邻接表的形势,这里为了简化链表的操作,我们省略了链表,避免了指针的麻烦,直接采用了c++中的vector来模拟链表,操作更加的方便:具体详细的使用,建议百度一下,这里不多说,至于拓扑排序的具体思想,相信大家应该都了解,那么直接上代码,如果有不理解的,建议查阅数据结构书籍,搞懂思想,结合这份代码,很好理解 1 #include <stdio.h> 2 #include

Find Min In Rotated Sorted Array,寻找反转序列中最小的元素。

问题描述:寻找反转序列中最小的元素. 算法分析:和寻找某个数是一个道理,还是利用二分查找,总体上分两种情况.nums[left]<=nums[mid],else.但是,在截取子序列的时候,有可能得到一个顺序序列.如34512,截取后得到12,此时要对这种情况判断,因为是顺序的,所以,最左边的元素就是最小元素.这点区别于寻找target,因为寻找target是根据target和left,mid,right做比较判断的.所以就不用对这种顺序情况单独讨论了. 1 public int findMin(

Solution 9: 判断序列是否为BST的后续遍历结果

问题描述 输入一个整数序列,判断该序列是否为一颗BST的后序遍历序列. 解决思路 递归: (1) 序列的最后一个元素为根节点元素: (2) 在序列中找出前一段代表根节点的左子树孩子们,而剩下的一段为右子树孩子们,检查这些节点的值是否都是大于(等于根节点元素). (3) 然后递归的对两部分进行判断. 程序 public class IsPostorderSequence { public boolean isPostorderSeq(int[] nums) { if (nums == null |

位运算--统计一个数的二进制序列中1的个数

给出一个十进制数,求出该数的二进制序列中1的个数.比如 15 的二进制序列是 00000000  00000000  00000000 00001111   1的个数是4. 下边将给出几种不同的解决办法: 方法一: int count_one(int num) { int count = 0; while (num) { if (num % 2 == 1) { count++; } num = num / 2; } return count; } 由于这种方法用到了模除运算,所以这个方法只能处理

[Python]判断序列是否为空的正确姿势

本篇文章起源于StackOverflow上一个热度非常高的问题: 我该如何判断一个Python列表是否为空? @Ray Vega (提问者) 举例说明,现在我得到了如下代码: a = [] 我如何该检查 a 是否为空? 面对这个问题,各路高手给出了不尽相同的回答. 最高票答案十分简洁: @Patrick (答题者) if not a: print("List is empty") 利用空列表的隐式布尔值是一个非常Pythonic的方式. 排名第二的答案与第一观点相同,并以PEP 8作为