关闭

黄金平衡

标签: pascal编程
521人阅读 评论(0) 收藏 举报

【题目描述】
农夫约翰的N头奶牛有很多相同之处。其实,约翰己经将每头奶牛的不同之处归纳成为K种特性,比如说,1号特性可以代表她身上有斑点,2号特性代表她更喜欢用Pascal而不是C来写程序等等。
约翰使用“特性标识符”来描述奶牛的各种特性:一个特性标识符就是一个二进制长度 为K的整数,每位比特可以标识一头奶牛的一个特性。比如一头奶牛的特性标识符是13,将13写成二进制:1101,从右向左看,就表示这头奶牛具冇1、3、4号特性,但没有2号特性。
约翰把N头奶牛排成了一排,发现在有些连续区间里的奶牛,每种特性出现的次数是一样的,约翰把这样的区间称为“平衡的”。作为一个喜欢研究的人,约翰希望你能帮忙找出平衡区间的最大长度。
【输入格式】
第一行两个整数N和K
接下来N行,每行一个十进制正整数ai表示第i头奶牛的特性标识符
【输出格式】
平衡区间的最大长度
【样例输入】
7 3
7
6
7
2
1
4
2
【样例输出】
4
【分析】
设sum[i,j]表示第1头到第i头奶牛属性j的出现次数,则列出方程:
sum[i][0]-sum[j][0]=sum[i][1]-sum[j][1]=…..=sum[i][k-1]-sum[j][k-1]
将方程变形可得
sum[i][1]-sum[i][0] = sum[j][1]-sum[j][0]
sum[i][2]-sum[i][0] = sum[j][2]-sum[j][0]
……
sum[i][k-1]-sum[i][0] = sum[j][k-1]-sum[j][0]
令count[i,j]=sum[i][j]-sum[i][0],就只要求出满足count[i][]=count[j][] 中最大的i-j即可。

const
  inf=10007; 
type
  arr=array[0..31]of longint; 
    rec=record
        data,no:longint; 
    end; 
var
  sum,count:array[0..100001,0..30]of longint; 
    h:array[0..inf,0..55]of rec; 
    i,j,n,m,max,t:longint; 
function check(x,y:longint):boolean; 
var
  i:longint; 
begin
  for i:=1 to m do
        if count[x,i]<>count[y,i] then exit(false); 
    exit(true); 
end; 
procedure insert(t:longint); 
var
  i,p:longint; 
begin
  p:=0; 
    for i:=1 to m do p:=p+count[t,i]*i; 
    p:=abs(p) mod inf; 
    i:=0; 
    while h[p,i].no=1 do begin
      if check(h[p,i].data,t)=true then begin
          if t-h[p,i].data>max then max:=t-h[p,i].data; 
          exit; 
        end; 
        inc(i); 
    end; 
    h[p,i].no:=1; 
    h[p,i].data:=t; 
end; 
begin
    max:=0; 
    fillchar(h,sizeof(h),0); 
    h[0,0].no:=1; 
  readln(n,m); 
    for i:=1 to n do begin
        read(t); 
        for j:=1 to m do begin
            sum[i,j]:=sum[i-1,j]+t mod 2; 
            count[i,j]:=sum[i,j]-sum[i,1]; 
            t:=t shr 1; 
        end; 
        insert(i); 
    end; 
    write(max); 
end. 
3
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

苹果产品设计中的黄金比例运用

你研究或者不研究,美就在那里,不偏不移;你发现或者不发现,黄金分割就在那里,不多不少。了解他,发现美,也给自己增加精彩,好作品不会没有依据。 掀开面纱     0.618或...
  • Anzhongliu
  • Anzhongliu
  • 2016-04-18 23:37
  • 1658

四十岁是科学家的黄金年龄 我还有机会

2013年5月时我就对张益唐在孪生素数猜想上取得的成绩发了一通感慨, 主要是感慨他在快六十了还能做出如此重要的成就,最近我发现这并不是个例。从事理论物理以及纯数学研究的人,在四五十岁做出重大的成就不在...
  • tomli2017
  • tomli2017
  • 2017-06-11 22:08
  • 350

自然界中神奇的秘密,黄金比例的应用

大自然的神奇之处就在于在随时随地都蕴藏着无穷的秘密,今天一块来分享一下黄金比例数字,希望对做IT的你能有一些启发。 一.植物“黄金角度”生物学家发现植物种类繁多、叶子形态各异,但是叶子在茎上的排列却有...
  • upi2u
  • upi2u
  • 2016-07-27 15:42
  • 2222

黄金连分数 - 蓝桥杯

标题:黄金连分数 - 蓝桥杯 内容:2013年第四届蓝桥杯全国软件大赛预赛第4题。 作者:MilkCu 题目描述 标题: 黄金连分数 黄金分割数0.61803... 是个无理数,这个常数十分重要,在许...
  • milkcu
  • milkcu
  • 2013-06-15 23:04
  • 6431

面试:上海黄金交易所与上海期货信息技术

以后要养成记录的习惯 1.上海黄金交易所 今天面的,赶快记录下来。 今年上金所的面试安排在同济大学四平路校区,面试共两轮,分别是群面和单面,同步进行。 **我先面的单面(3对1),有的同学是先进行群...
  • nadizhong4136
  • nadizhong4136
  • 2017-11-29 20:19
  • 349

Mimikatz小实验:黄金票据+dcsync dawner2016-08-26共26576人围观 ,发现 5 个不明物体

这篇博文是为了解释下Benjamin Delpy(@gentilkiwi)在这条推特上写的东西,看官们且耐住性子。 FreeBuf科普时间 krbtgt账户:每个域控制器都有一个“kr...
  • qq_27446553
  • qq_27446553
  • 2016-08-27 16:41
  • 656

论黄金分割的设计使用

黄金分割是一个数学比例。我们在大自然中很容易找到这样的比例,当它用于设计时,能创造有生命力的、纯天然的视觉作品,愉悦我们的眼睛,但究竟什么事黄金比例,如何使用它来提高你设计水平呢? 一、黄金分割...
  • u010975449
  • u010975449
  • 2016-08-12 20:44
  • 1937

黄金生产成本你知道多少?

生产成本是个较模糊的概念,难以对金价底部进行判断,但其衍生出的平均成本、边际成本对金价底部的判断却很有价值。不同地域的成本相差极大,最低的美仅为733美元/盎司,而最高的澳大利亚则为1829美元/盎司...
  • l172942736
  • l172942736
  • 2015-03-04 23:31
  • 945

用户界面交互设计的八项黄金法则

用户界面交互设计的八项黄金法则是1998年由Ben Shneiderman提出的。Ben Shneiderman(本.施耐德曼),现任马里兰大学学院公园分校计算机科学系教授,是人机交互实验室的创建者,...
  • li0531
  • li0531
  • 2013-03-12 11:29
  • 4362

Codeforces 458A/51nod 1491 黄金系统【思维】好题~

1491 黄金系统 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 q=5√+12,在黄金系统下...
  • mengxiang000000
  • mengxiang000000
  • 2016-12-09 14:33
  • 541
    个人资料
    • 访问:228597次
    • 积分:3669
    • 等级:
    • 排名:第10309名
    • 原创:176篇
    • 转载:22篇
    • 译文:0篇
    • 评论:18条
    个人主页
    www.jrxblog.top 欢迎访问&交换友链!
    博客专栏