ISIJ 2018 超級跳棋

2021-08-24 17:59:19 字數 3068 閱讀 2331

無憂公主 2018-07-10

題目名稱:超級跳棋

檔名稱:super.in / super.out

題目描述

小明是今年超級跳棋比賽的裁判,每輪有三名選手參加,結束時統計的分數一定是正整數,形如 a:b:c。小明的任務是在一塊特殊的計分板上展示分數,他一共準備了

n n

塊寫有正整數 x1

,x2,

……,x

n' role="presentation" style="position: relative;">x1,

x2,…

…,xn

x1,x

2,……

,xn的卡片,可供填寫在 a、b、c 的位置上。此外,小明了解到超級跳棋的規則,他發現 a、b、c 之間最多相差

k k

倍,例如 ca

>

k' role="presentation" style="position: relative;">c

a>kc

a>

k就是不合法的分數。為了檢驗他準備得是否充分,你需要計算小明可以在計分板上擺放出多少種不同的分數,即 (a,b,c) 這樣的三元組有多少個。

限制1s 256m

對於 20% 的資料,3≤

n≤100,

000,k=

1,1≤

xi≤100

,000

3 ≤n

≤100

,000,k

=1,1

≤xi≤

100,

000對於另外 20% 的資料,3≤

n≤100,1≤

k≤100,1≤

xi≤100

3 ≤n

≤100,1

≤k

≤100,1

≤xi≤

100對於另外 30% 的資料,3≤

n≤100,

000,1≤

k,xi

≤109且

所有xi

互不相同

3 ≤n

≤100

,000,1

≤k,x

i≤109

且所有x

i互不相

同對於另外 30% 的資料,3≤

n≤100,

000,1≤

k,xi

≤109 3≤n

≤100

,000,1

≤k,x

i≤109

輸入格式

第一行,兩個整數

n n

和 k' role="presentation" style="position: relative;">kk

第二行,

n n

個整數 x1

,x2,

……,x

n' role="presentation" style="position: relative;">x1,

x2,…

…,xn

x1,x

2,……

,xn

輸出格式

乙個整數,表示 (a,b,c) 三元組的個數

輸入樣例

5 21 1 2 2 3

輸出格式

樣例解釋

小明可以擺出的 a:b:c 有以下這些:1:1:2、1:2:1、2:1:1、1:2:2、2:1:2、2:2:1、2:2:3、2:3:2、3:2:2。由於 k=

2 k=2

,1 和 3 不能同時出現。

題解首先將 xi

x

i排序,對於固定的最小值 xi

x

i,a、b、c 三個數必然在 xi

x

i到 xj

x

j中選(即 xj

+1xi

>

k xj+

1x

i>

k),當然對於

i i

可以掃瞄線快速求得

j' role="presentation" style="position: relative;">j

j。假設 xi

x

i必然取,然後可以根據 xi

x

i選 1 個還是 2 個還是 3 個,分類討論並用乘法原理統計答案。需要同時維護當前 xi

x

i到 xj

x

j有幾個是只出現了 1 次、有幾個是出現了至少 2 次的(用 map 記錄乙個數出現了幾次)。

#include 

using

namespace

std;

template

void read(t &t)

do while ('0'

<=ch&&ch<='9'); t*=f;

}typedef

long

long ll;

const

int maxn=100010;

int n,k,x[maxn],a[maxn],sz;

map m;

ll ans;

int main()

sort(x+1,x+(n+1));

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

if (x[i]!=x[i-1]) a[++sz]=x[i];

int pos=0,c1=0,c2=0;

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

int v=0;

if (m[a[i]]>=2) v++;

int s=c1+c2-1;

ans+=3*(c1-v);

if (s>1) ans+=3ll*s*(s-1);

if (m[a[i]]>=2) ans+=3*(c1+c2-1);

if (m[a[i]]>=3) ans++;

if (m[a[i]]>=2) c1--; else c2--;

}printf("%lld\n",ans);

return

0;}

ISIJ 2018 奇怪的字串

題目名稱 奇怪的字串 檔名稱 strange.in strange.out 題目描述 考慮字串 s 僅由小寫字母組成,例如 abba 定義 w s 為 s 所有本質不同的連續子串的集合,例如 w abba 定義 y s 為 s 所有本質不同的非連續子串的集合,例如 y abba w abba 顯然 ...

jzoj3294 SHTSC2013 超級跳馬

僅有一行,包含兩個正整數n,m,表示棋盤的規模。output 僅有一行,包含乙個整數,即跳法種數mod 30011。sample input 3 5sample output data constraint 對於10 的資料,1 n 10,2 m 10 對於50 的資料,1 n 10,2 m 10 ...

2023年3月 CCF真題1 跳一跳

問題描述 近來,跳一跳這款小遊戲風靡全國,受到不少玩家的喜愛。簡化後的跳一跳規則如下 玩家每次從當前方塊跳到下乙個方塊,如果沒有跳到下乙個方塊上則遊戲結束。如果跳到了方塊上,但沒有跳到方塊的中心則獲得1分 跳到方塊中心時,若上一次的得分為1分或這是本局遊戲的第一次跳 躍則此次得分為2分,否則此次得分...