1. 程式人生 > >第八屆藍橋杯決賽試題: 對局匹配

第八屆藍橋杯決賽試題: 對局匹配

題目:

標題:對局匹配
小明喜歡在一個圍棋網站上找別人線上對弈。這個網站上所有註冊使用者都有一個積分,代表他的圍棋水平。
小明發現網站的自動對局系統在匹配對手時,只會將積分差恰好是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