• BZOJ 2456: mode


    2456: mode

    Description

    给你一个n个数的数列,其中某个数出现了超过n div 2次即众数,请你找出那个数。

    Input

    第1行一个正整数n。
    第2行n个正整数用空格隔开。

    Output

        一行一个正整数表示那个众数。

    Sample Input

    5
    3 2 3 1 3

    Sample Output

    3

    ——我是愉快的分隔符——

    看到了1M的内存限制,我就想这题是在坑爹吧!如果用<iostream>的话,应该直接就领便当了吧……但是仔细一想一个数的出现次数超过一般,那么如果记作这个数出现为+1,不是这个数出现为-1那么,最坏情况最后的和为0,就利用这个性质,一下子能用两个变量A掉这题辣!

    下面是代码。真的很简单很简单!

    #include<cstdio>
    using namespace std;
    int n,tot,num,tnum;
    int main(){
    	scanf("%d",&n);
    	for (;n;n--){
    		scanf("%d",&num);
    		if (tot<=0){
    			tnum=num;
    			tot=1;
    		}else if (tnum!=num){
    			tot--;
    		}else{
    			tot++;
    		}
    	}
    	printf("%d
    ",tnum);
    	return 0;
    } 



  • 相关阅读:
    开发进度1
    人月神话阅读笔记(1)
    仓库管理系统
    课程管理系统教程
    流与文件课后作业2加解密工作
    流与文件课后作业3
    今日学习时间记录
    Java字符串切片
    java_ 集合
    json基础教程|理解Json
  • 原文地址:https://www.cnblogs.com/WNJXYK/p/4063970.html
Copyright © 2020-2023  润新知