URAL - 1794 Masterpieces of World Architecture(“投票法”)

Masterpieces of World Architecture

Time Limit: 1000MS   Memory Limit: 65536KB   64bit IO Format: %I64d & %I64u

Submit Status

Description

Maria Ivanovna informed all of her fifth-graders that in a month they would have a class on the topic “Masterpieces of World Architecture.” Each of the students had to prepare a short report about a famous architectural structure.
As always, the best students prepared their reports in advance and the worst students started preparing for the class only several minutes before it.

The class has begun. According to the tradition, at such classes the children are sitting in a circle and speaking one after another in clockwise order. The best students like to be the first to speak, while the worst students
want to be the last because they are trying to finish their reports right during the class.

Maria Ivanovna has asked each student which in turn they want to present their reports. Now she has to decide who will be the first to speak so that as many children as possible will have their turn to speak exactly as they want.

Input

The first line contains the number n of students in the class (2 ≤ n ≤ 10 5). Maria Ivanovna has numbered all the children from 1 to nclockwise
in the order in which they are sitting. The second line contains integers a1, …, an (1 ≤ ai ≤ n) separated with
a space, where ai is the number told by the ith student.

Output

Output the number of the student who should start the class “Masterpieces of World Architecture” by presenting their report. If there are several possible answers, output any of them.

Sample Input

input output
4
4 1 2 3
2
3
1 1 1
3

比赛时是队友写出来的,思路就是对每个人求满足其位置需求的排列第一个演讲的是谁,累加后“得票”最多的既为第一个演讲的人。

有个大神题解写的很明白,贴个链接

http://blog.csdn.net/pegasuswang_/article/details/10414563

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
#include<vector>
#include<cmath>
#include<map>
#include<utility>
#define inf 0x3f3f3f3f
#define eps 1e-6
int a[100010];
int cnt[100010];
using namespace std;
int main()
{
	int n;
	while(cin>>n)
	{
		for(int i=0;i<n;i++)
		{
			scanf("%d",a+i);
		}
		memset(cnt,0,sizeof(cnt));
		for(int i=0;i<n;i++)
		{
			cnt[(i+n+1-a[i])%n]++;
		}
		int max=0;
		int pos;
		for(int i=0;i<n;i++)
		{
			if(cnt[i]>max)
			{
				max=cnt[i];
				pos=i+1;
			}
		}
		cout<<pos<<endl;
	}
	return 0;
}
时间: 2024-11-10 16:11:53

URAL - 1794 Masterpieces of World Architecture(“投票法”)的相关文章

LeetCode题解-----Majority Element II 摩尔投票法

题目描述: Given an integer array of size n, find all elements that appear more than ⌊ n/3 ⌋ times. The algorithm should run in linear time and in O(1) space. 分析: 因为要找出的是出现次数大于⌊ n/3 ⌋的元素,因此最多只可能存在两个这样的元素,而且要求O(1)的空间复杂度,因此只能使用摩尔投票法.首先我们遍历一遍数组找出两个候选元素,接着再遍历

【LeetCode】169. 多数元素(摩尔投票法)

给定一个大小为 n 的数组,找到其中的多数元素.多数元素是指在数组中出现次数大于?? n/2 ??的元素. 你可以假设数组是非空的,并且给定的数组总是存在多数元素. 示例?1: 输入: [3,2,3] 输出: 3 示例?2: 输入: [2,2,1,1,1,2,2] 输出: 2 代码: 解法一:哈希统计 class Solution { public int majorityElement(int[] nums) { int len=nums.length; int count=1; int[]

【基础知识八】集成学习

难点:如何产生"好而不同"的个体学习器:"好而不同":"准确性"和"多样性" 一.个体与集成 构建并结合多个学习器来完成学习任务 集成:结果通过投票法voting产生,"少数服从多数" 获得整体性能提升要求个体学习器:好而不同 1)个体学习器有一定的"准确性" 2)学习器间具有差异 集成学习的错误率: 假设基学习器的误差相互独立,随着集成中个体分类器数目T的增大,集成的错误率将指数级下降

229. Majority Element II

Given an integer array of size n, find all elements that appear more than ? n/3 ? times. The algorithm should run in linear time and in O(1) space. 用的是摩尔投票法,原版的算法是找一个数组出现次数大于数组长度半数的数(只有当数组中存在这样的数时,这个算法才会生效,而且不难理解,如果有也只可能有一个),方法就是定义一个变量m,记录当前的候选数字,再定义

算法(7)Majority Element II

题目:找出数组中出现次数大于n/3次的数字 思路:摩尔投票法.所有的帖子中都说:先遍历一遍数组找到备选元素,然后再遍历一遍数组考察下这个元素是否是真的超过n/3,然后就直接上代码,但是现在的问题是:我怎么找到这个备选的元素?!票是怎么投起来的呢?通过参考文章中的代码,大致明白了,醍醐灌顶(http://www.cnblogs.com/grandyang/p/4606822.html).那么怎么遍历一遍数组然后找到备选元素呢?这个算法还得从找到大于一半的数说起:整个数组中有两个不一样的数的时候,就

KNN算法--物以类聚,人以群分

KNN(K Nearest Neighbors,K近邻 )算法是机器学习所有算法中理论最简单,最好理解的.KNN是一种基于实例的学习,通过计算新数据与训练数据特征值之间的距离,然后选取K(K>=1)个距离最近的邻居进行分类判断(投票法)或者回归.如果K=1,那么新数据被简单分配给其近邻的类.KNN算法算是监督学习还是无监督学习呢?首先来看一下监督学习和无监督学习的定义.对于监督学习,数据都有明确的label(分类针对离散分布,回归针对连续分布),根据机器学习产生的模型可以将新数据分到一个明确的类

KNN分类算法补充

KNN补充: 1.K值设定为多大? k太小,分类结果易受噪声点影响:k太大,近邻中又可能包含太多的其它类别的点. (对距离加权,可以降低k值设定的影响) k值通常是采用交叉检验来确定(以k=1为基准) 经验规则:k一般低于训练样本数的平方根 2.类别如何判定最合适? 加权投票法更恰当一些.而具体如何加权,需要根据具体的业务和数据特性来探索 3.如何选择合适的距离衡量? 高维度对距离衡量的影响:众所周知当变量数越多,欧式距离的区分能力就越差. 变量值域对距离的影响:值域越大的变量常常会在距离计算中

Bagging与随机森林算法原理小结

在集成学习原理小结中,我们讲到了集成学习有两个流派,一个是boosting派系,它的特点是各个弱学习器之间有依赖关系.另一种是bagging流派,它的特点是各个弱学习器之间没有依赖关系,可以并行拟合.本文就对集成学习中Bagging与随机森林算法做一个总结. 随机森林是集成学习中可以和梯度提升树GBDT分庭抗礼的算法,尤其是它可以很方便的并行训练,在如今大数据大样本的的时代很有诱惑力. 1.  bagging的原理 在集成学习原理小结中,我们给Bagging画了下面一张原理图. 从上图可以看出,

如何实现并应用决策树算法?

本文对决策树算法进行简单的总结和梳理,并对著名的决策树算法ID3(Iterative Dichotomiser 迭代二分器)进行实现,实现采用Python语言,一句老梗,“人生苦短,我用Python”,Python确实能够省很多语言方面的事,从而可以让我们专注于问题和解决问题的逻辑. 根据不同的数据,我实现了三个版本的ID3算法,复杂度逐步提升: 1.纯标称值无缺失数据集 2.连续值和标称值混合且无缺失数据集 3.连续值和标称值混合,有缺失数据集 第一个算法参考了<机器学习实战>的大部分代码,