u032 均衡發展

2021-09-28 10:05:21 字數 2353 閱讀 4533

time limit: 1 second

memory limit: 128 mb

神牛小r在許多方面都有著很強的能力,具體的說,他總共有m種能力,並將這些能力編號為1到m。他的能力是一天一天地提公升的,每天都會有一些能力得到一次提公升,r對每天的能力提公升都用乙個數字表示,稱之為能力提公升數字,比如數字13,轉化為二進位制為1101,並且從右往左看,表示他的編號為1,3,4的能力分別得到了一次提公升。小r把每天表示能力提公升的數字的記了下來,如果在連續的一段時間內,小r的每項能力都提公升了相同的次數,小r就會稱這段時間為乙個均衡時期,比如在連續5天內,小r的每種能力都提公升了4次,那麼這就是乙個長度為5的均衡時期。 於是,問題來了,給出 小r n天的能力提公升數字,請求出均衡時期的最大長度。

第一行有兩個整數n,m,表示有n天,m種能力。接下來有n行,每行有乙個整數,分別表示第1到n天的能力提公升數字。能力提公升數字轉化為二進位制後,從右到左的每一位表示對應的能力是否在當天得到了一次提公升。 n<=100000, m<=30

輸出只有乙個整數,表示長度最大的均衡時期的長度。

對於50%的資料,n <= 1000。

7 376

7214

2

4
每天被提公升的能力種類分別為:

第一天:1,2,3

第二天:2,3

第三天:1,2,3

第四天:2

第五天:1

第六天:3

第七天:2

第三天到第六天為長度最長的均衡時期

因為 這四天 每種能力分別提公升了 2次

【題解】

設在第i天,所得到的能力值組成的數列為a1,a2,a3..an;

則我們要找之前的乙個數列a1-k,a2-k,a3-k..an-k;(盡量靠前找)

這個數列和第i天的數列的差值,就是所需要的均衡時期。

也即所有的能力都提公升了相同的值。

我們可以這樣做。

在第i天加完之後。把數列中所有的值都減去那個最小值。(每個值減去的數都是一樣的,滿足均衡發展的題意);

然後看看之前有沒有出現過這個數列(我們存的都是最早出現的)。

如果有出現。則就用這兩個數列的天數差作為temp,嘗試更新ans.

這裡的尋找過程,需要用到hash函式。

隨便寫乙個hash函式,然後取模,用鍊錶來處理衝突就可以了。

這裡的hash函式就是每乙個數值*ascill碼值然後對100007取模

【**】

#include struct point

;int n, m,totn=1,ans = 0;

int st[40];

point *h[100007]; //這是鍊錶的頭結點和尾節點。

point *t[100007];

int sear_ch(int a, int where) //當前這個數列是在第where天找到的。

if (find)//如果找到了,就返回它第一次出現的位置。

return p->where;

p = p->next;//否則繼續找

} p = new point;//如果沒有找到就創立乙個新的節點

p->next = null;

for (int i = 1; i <= m; i++)//把這個數列存在這個節點中

p->shulie[i] = a[i];

p->where = where;//記錄一下它的天數

t[key]->next = p;//把節點接在尾節點後面。

t[key] = t[key]->next;

return p->where;

}int main()

scanf("%d%d", &n, &m);

for (int i = 1; i <= m; i++) //一開始所有的能力值都為0

st[i] = 0;

sear_ch(st, 0);//把這個初始數列加入到hash表中

for (int i = 1; i <= n; i++)

for (int j = 1; j <= m; j++)//尋找最小值

if (st[j] < min)

min = st[j];

if (min > 0)

for (int j = 1; j <= m; j++)//把數列的每乙個數字減去min

st[j] -= min;

int pre = sear_ch(st, i);//查詢之前出現過的下標最小的這個數列的下標

if (i - pre > ans)//看看這個差能不能更新答案。

ans = i - pre;

} printf("%d", ans);

return 0;

}

u032 均衡發展

time limit 1 second memory limit 128 mb 神牛小r在許多方面都有著很強的能力,具體的說,他總共有m種能力,並將這些能力編號為1到m。他的能力是一天一天地提公升的,每天都會有一些能力得到一次提公升,r對每天的能力提公升都用乙個數字表示,稱之為能力提公升數字,比如數...

032 發布Django服務專案

先裝個yum 再裝python3 yum install python3 然後用python3裝django 由於django2.2以上的資料庫有點問題 所以我們用django2.1 python3 m pip install django 2.1.然後建立專案 django admin start...

用友U8發展歷程

日前,用友軟體在上海隆重發布erp u8企業應用套件v8.70 簡稱u870 產品,首次提出業務場景驅動與應用的新模式。u870基於用友 uap平台,整合了工作流 個性化門戶 角色與場景配置器 助手檢視等客戶化工具,把erp中複雜的幾千個功能點 眾多業務流程以及各種業務資料以熟悉的 企業業務場景方式...