第八屆藍橋杯決賽試題: 對局匹配
題目:
標題:對局匹配
小明喜歡在一個圍棋網站上找別人線上對弈。這個網站上所有註冊使用者都有一個積分,代表他的圍棋水平。
小明發現網站的自動對局系統在匹配對手時,只會將積分差恰好是K的兩名使用者匹配在一起。如果兩人分差小於或大於K,系統都不會將他們匹配。
現在小明知道這個網站總共有N名使用者,以及他們的積分分別是A1, A2, ... AN。
小明想了解最多可能有多少名使用者同時線上尋找對手,但是系統卻一場對局都匹配不起來(任意兩名使用者積分差不等於K)?
輸入
----
第一行包含兩個個整數N和K。
第二行包含N個整數A1, A2, ... AN。
對於30%的資料,1 <= N <= 10
對於100%的資料,1 <= N <= 100000, 0 <= Ai <= 100000, 0 <= K <= 100000
輸出
----
一個整數,代表答案。
樣例輸入:
10 0
1 4 2 8 5 7 1 4 2 8
樣例輸出:
6
再比如,
樣例輸入:
10 1
2 1 1 1 1 4 4 3 4 4
樣例輸出:
8
資源約定:
峰值記憶體消耗 < 256M
CPU消耗 < 1000ms
請嚴格按要求輸出,不要畫蛇添足地列印類似:“請您輸入...” 的多餘內容。
所有程式碼放在同一個原始檔中,除錯通過後,拷貝提交該原始碼。
注意: main函式需要返回0
注意: 只使用ANSI C/ANSI C++ 標準,不要呼叫依賴於編譯環境或作業系統的特殊函式。
注意: 所有依賴的函式必須明確地在原始檔中 #include <xxx>, 不能通過工程設定而省略常用標頭檔案。
提交時,注意選擇所期望的編譯器型別。
程式碼
// 對局匹配 最多能找到多少個數,兩兩的差均不為K
#include <bits/stdc++.h>
using namespace std;
#define maxn 100000
int an[maxn+5];
int cnt[maxn+5]; // 記錄各個數的個數
int val[maxn+5]; // 等差陣列, 差為K
int dp[maxn+5]; // 當前狀態下能取到的最大個數和
int N, K;
long res = 0;
void init()
{
memset(an,0,sizeof (an));
memset(cnt,0,sizeof(cnt));
cin >> N >> K;
for(int i=0; i<N;++i) {
cin >> an[i];
cnt[an[i]] += 1;
}
}
int main()
{
init();
if(K==0) {
// K=0, 即不取相同數即可, 在各個數中取一個
for(int i=0; i<N; ++i) {
if(cnt[i]) res += 1;
}
} else {
// 沒次都構造一個等差陣列val, 每個陣列中都取最大能取到的個數
// 最後累加就是最後結果,因為各個等差陣列之間均不能匹配(差不為K)
for(int i=0; i<K; ++i) {
int m = 0;
for(int j=i; j <= maxn; j+=K) {
val[m++] = cnt[j];
}
dp[0] = val[0];
dp[1] = max(dp[0], val[1]);
for(int j=2; j<m; j++) {
dp[j] = max(dp[j-1], dp[j-2]+val[j]);
}
// 能取到的最大個數就是dp[m-1]
res += dp[m-1];
}
}
cout << res;
return 0;
}
相關推薦
第八屆藍橋杯決賽試題: 對局匹配
題目: 標題:對局匹配 小明喜歡在一個圍棋網站上找別人線上對弈。這個網站上所有註冊使用者都有一個積分,代表他的圍棋水平。 小明發現網站的自動對局系統在匹配對手時,只會將積分差恰好是K的兩名使用者匹
第八屆藍橋杯決賽 發現環
algo 兩個 str 操作系統 管理員 n) 空格 sort 數據傳輸 標題:發現環小明的實驗室有N臺電腦,編號1~N。原本這N臺電腦之間有N-1條數據鏈接相連,恰好構成一個樹形網絡。在樹形網絡上,任意兩臺電腦之間有唯一的路徑相連。不過在最近一次維護網絡時,管理員誤操作使
第八屆藍橋杯決賽 磁磚樣式
map 思路 藍橋杯 jsb 標題 分享 。。 amp span 標題:磁磚樣式 小明家的一面裝飾墻原來是 3*10 的小方格。現在手頭有一批剛好能蓋住2個小方格的長方形瓷磚。瓷磚只有兩種顏色:黃色和橙色。小明想知道,對於這麽簡陋的原料,可以貼出多少種不同的花樣來。小明有個
2017第八屆藍橋杯決賽(B組)2.磁磚樣式
利用 分享 部分 span 裝飾 mage 整數 bool png 磁磚樣式 小明家的一面裝飾墻原來是 310 的小方格。 現在手頭有一批剛好能蓋住2個小方格的長方形瓷磚。 瓷磚只有兩種顏色:黃色和橙色。 小明想知道,對於這麽簡陋的原料,可以貼出多少種不同的花樣來。 小明有
2017第八屆藍橋杯決賽(B組)4.發現環
之間 bound 維護 順序 ins 兩個 class () clas 描述 小明的實驗室有N臺電腦,編號1~N。原本這N臺電腦之間有N-1條數據鏈接相連,恰好構成一個樹形網絡。在樹形網絡上,任意兩臺電腦之間有唯一的路徑相連。 不過在最近一次維護網絡時,管理員誤操作使得某兩
2017第八屆藍橋杯決賽之旅
時間過得好快,四小時匆匆過去了。其實三個小時的時候就已經坐不住了,想跑。。再看題,看不懂,再檢查,不知道破綻在那裡。拿起麵包,狠狠地撕開咬了一口,拿過牛奶猛吸幾口。看看對面的強哥,笑了笑
2017第八屆藍橋杯決賽_希爾伯特曲線
2017第八屆藍橋杯決賽試題 標題:希爾伯特曲線 希爾伯特曲線是以下一系列分形曲線 Hn 的極限。我們可以把 Hn 看作一條覆蓋 2^n × 2^n 方格矩陣的曲線,曲線上一共有 2^n × 2^n 個頂點(包括左下角起點和右下角終點),恰好覆蓋每個方格一次。 [p1.pn
第八屆藍橋杯決賽 對局匹配
標題:對局匹配 小明喜歡在一個圍棋網站上找別人線上對弈。這個網站上所有註冊使用者都有一個積分,代表他的圍棋水平。 小明發現網站的自動對局系統在匹配對手時,只會將積分差恰好是K的兩名使用者匹配在一起。如果兩人分差小於或大於KK,系統都不會將他們匹配。 現在小
第八屆藍橋杯大賽試題及解答
題目: 購物單 小明剛剛找到工作,老闆人很好,只是老闆夫人很愛購物。老闆忙的時候經常讓小明幫忙到商場代為購物。小明很厭煩,但又不好推辭。 這不,XX大促銷又來了!老闆夫人開出了長長的購物單,都是有打折優惠的。 小明也有個怪癖,不到萬不得已,從不刷卡,直接現
( 題解 )第六屆藍橋杯決賽試題 -- 完美正方形 (線段樹 + 深搜)
題目 : 完美正方形 如果一些邊長互不相同的正方形,可以恰好拼出一個更大的正方形,則稱其為完美正方形。 歷史上,人們花了很久才找到了若干完美正方形。比如:如下邊長的22個正方形 2 3 4 6 7 8 12 13 14 15 16 17 18 21 22 23 24 26
第八屆藍橋杯大賽試題及題解
第一題標題:貪吃蛇長度+-------------------------------------------------+| || H######
第八屆藍橋杯Java A組決賽試題
1.標題:圖書排列將編號為1~10的10本書排放在書架上,要求編號相鄰的書不能放在相鄰的位置。請計算一共有多少種不同的排列方案。注意,需要提交的是一個整數,不要填寫任何多餘的內容。答案:479306思路:全排或者DFSimport java.util.*; public cl
第八屆藍橋杯Java C組決賽試題
1.標題:數位和數學家高斯很小的時候就天分過人。一次老師指定的算數題目是:1+2+...+100。高斯立即做出答案:5050!這次你的任務是類似的。但並非是把一個個的數字加起來,而是對該數字的每一個數位作累加。這樣從1加到100的“和”是:901從10加到15是:21,也就是
藍橋杯:2017年第八屆藍橋杯省賽B組第十題—PREV-40K倍區間
膜拜這位大佬 做法:首先統計字首和sum[i] 表示A1+A2+…+Ai.所以對於任意一段區間[l,r]的和就是sum[r]-sum[l-1].如果要保證這個區間和為K倍數就是:(sum[r]-sum[l-1])%k == 0.變形後就是:sum[r]%k==sum[l-1]%k,
【Java】【第八屆藍橋杯】【試題】【無答案】
1、 標題: 購物單 小明剛剛找到工作,老闆人很好,只是老闆夫人很愛購物。老闆忙的時候經常讓小明幫忙到商場代為購物。小明很厭煩,但又不好推辭。 這不,XX大促銷又來了!老闆夫人開出了長長的購物單,都是有打折優惠的。 小明也有個怪癖,不到萬不得已,從不
2017年第八屆藍橋杯試題(C/C++本科B組)1-8題
1.標題: 購物單 小明剛剛找到工作,老闆人很好,只是老闆夫人很愛購物。老闆忙的時候經常讓小明幫忙到商場代為購物。小明很厭煩,但又不好推辭。 這不,XX大促銷又來了!老闆夫人開出了長長的購物單,都是有打折優惠的。 小明也有個怪癖,不到萬不得已,從不刷卡,直接
2017第八屆藍橋杯B組省賽第六題:最大公共子串
第六題 標題:最大公共子串 最大公共子串長度問題就是: 求兩個串的所有子串中能夠匹配上的最大長度是多少。 比如:"abcdkkk" 和 "baabcdadabc", 可以找到的最長的公共子串是"a
第八屆藍橋杯大賽個人賽決賽(軟體類)真題 -----Java大學C組------樹形顯示
標題:樹形顯示對於分類結構可以用樹形來形象地表示。比如:檔案系統就是典型的例子。樹中的結點具有父子關係。我們在顯示的時候,把子項向右縮排(用空格,不是tab),並新增必要的連線線,以使其層次關係更醒目。下面的程式碼就是為了這個目的的,請仔細閱讀原始碼,並填寫劃線部分缺少的程式
第八屆藍橋杯大賽個人賽決賽(軟體類)真題 Java大學B組 答案
標題:平方十位數由0~9這10個數字不重複、不遺漏,可以組成很多10位數字。這其中也有很多恰好是平方數(是某個數的平方)。比如:1026753849,就是其中最小的一個平方數。請你找出其中最大的一個平方數是多少?注意:你需要提交的是一個10位數字,不要填寫任何多餘內容。答案:
第八屆藍橋杯【省賽試題5】取數位
題目描述: 求1個整數的第k位數字有很多種方法。 以下的方法就是一種。// 求x用10進製表示時的數位長度 int len(int x){ if(x<10) return 1; retur