zoukankan      html  css  js  c++  java
  • [bzoj2456]mode

    来自FallDream的博客,未经允许,请勿转载,谢谢。


    给定n个数,其中有一个数出现次数大于n/2,输出那个数  内存1MB

    题解:先记下第一个数和此时的出现次数(一开始是1),然后一个个往后处理,如果这个数和现在几下的数不同,那么出现次数-1,否则出现次数+1。如果出现次数变为0,则把记下的数字改成现在这个数,这样一定能找到那个数。

    比如3 2 4 3 3    (3,1)->(2,1)->(4,1)->(3,1)->(3,2),找到了数字3

    只能卡到40ms不知道rank1怎么卡到的36ms

    #include<cstdio>
    using namespace std;
    char B[1<<15],*S=B,*T=B,C;int X;
    #define getc() (S==T&&(T=((S=B)+fread(B,1,1<<15,stdin)),S==T)?0:*S++)
    inline  int read()
    { 
        X=0;C=getc();
        while(C < '0' || C > '9'){ C = getc();}
        while(C >= '0' && C <= '9'){X = X * 10 + C - '0';C = getc();}
        return X;
    }
    int n,a,b,x;
    int main()
    {
        n=read();a=read();b=1;
        for(register int i=2;i<=n;++i)
            x=read(),
            x==a?++b:--b,
            b?0:(a=x,b=1);
        printf("%d",a);
        return 0;
    }
  • 相关阅读:
    iOS 字体
    接口继承和实现继承的区别
    实验楼实验——LINUX基础入门
    试看看能不能发布
    mysql binlog恢复
    percona
    ssh2 php扩展
    sphinx
    ngios
    socketlog
  • 原文地址:https://www.cnblogs.com/FallDream/p/bzoj4067.html
Copyright © 2011-2022 走看看