Kickstart 2019 Practice Round 解題報(bào)告



比賽鏈接

Number Guessing

大意

本題為交互題仇矾。
已知一個(gè)隱藏的正整數(shù) P 在一個(gè)已知的區(qū)間 (0, B] 中。每次詢問輸入正整數(shù) Q雌贱,返回 PQ 的大小關(guān)系。一共有不超過 30 次詢問機(jī)會,試求 P 据途。
題目保證正整數(shù) B 不超過 109绞愚。

分析

這個(gè)題就是一個(gè)二分,也沒什么需要注意的細(xì)節(jié)颖医。

代碼

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
#define FOR(i, a, b) for (int (i) = (a); (i) <= (b); (i)++)
#define ROF(i, a, b) for (int (i) = (a); (i) >= (b); (i)--)
#define REP(i, n) FOR(i, 0, (n)-1)
#define sqr(x) ((x) * (x))
#define all(x) (x).begin(), (x).end()
#define reset(x, y) memset(x, y, sizeof(x))
#define uni(x) (x).erase(unique(all(x)), (x).end());
#define BUG(x) cerr << #x << " = " << (x) << endl
#define pb push_back
#define eb emplace_back
#define mp make_pair
#define _1 first
#define _2 second
#define chkmin(a, b) a = min(a, b)
#define chkmax(a, b) a = max(a, b)

int T;

int main() {
  cin >> T;
  while (T--) {
    int lo, hi, n;
    cin >> lo >> hi >> n;
    lo++;
    while (lo <= hi) {
      int m = lo + hi >> 1;
      cout << m << endl;
      string s;
      cin >> s;
      if (s == "CORRECT") break;
      if (s == "TOO_SMALL") lo = m + 1;
      else hi = m - 1;
    }
  }
}


Mural

大意

給定一個(gè)長度為 N 的數(shù)組位衩。初始情況下所有數(shù)均可選。
定義一回合為 (依次進(jìn)行):

  1. 選擇一個(gè)尚未被選擇或丟棄的數(shù)熔萧,要求與已經(jīng)選擇的任意數(shù)字鄰接糖驴;
  2. 丟棄一個(gè)尚未被選擇的數(shù),要求在當(dāng)且數(shù)組的最左邊或最右邊佛致。

第一回合可以開始于任意位置贮缕。
當(dāng)數(shù)組中所有的數(shù)字均被選擇或丟棄時(shí),游戲結(jié)束晌杰。此時(shí)所有被選擇的數(shù)字之和為這局游戲的得分跷睦。試求最高可能得分。
題目保證 N 不超過 5 × 106 肋演。

分析

不難發(fā)現(xiàn)抑诸,被選擇的數(shù)字永遠(yuǎn)是連續(xù)的且不管如何選擇,總有一半(向上取整)的數(shù)字可以被選爹殊。
所以這個(gè)問題就被轉(zhuǎn)化成了給定長度的連續(xù)和最值問題蜕乡。

代碼

總復(fù)雜度為: O(n)

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
#define FOR(i, a, b) for (int (i) = (a); (i) <= (b); (i)++)
#define ROF(i, a, b) for (int (i) = (a); (i) >= (b); (i)--)
#define REP(i, n) FOR(i, 0, (n)-1)
#define sqr(x) ((x) * (x))
#define all(x) (x).begin(), (x).end()
#define reset(x, y) memset(x, y, sizeof(x))
#define uni(x) (x).erase(unique(all(x)), (x).end());
#define BUG(x) cerr << #x << " = " << (x) << endl
#define pb push_back
#define eb emplace_back
#define mp make_pair
#define _1 first
#define _2 second
#define chkmin(a, b) a = min(a, b)
#define chkmax(a, b) a = max(a, b)

const int maxn = 5123456;

int T, n;
char s[maxn];

int main() {
  scanf("%d", &T);
  FOR(cs, 1, T) {
    scanf("%d%s", &n, s + 1);
    int len = n + 1 >> 1, ans = 0, now;
    FOR(i, 1, len) ans += s[i] - '0';
    now = ans;
    FOR(i, 2, n - len + 1) {
      now = now + s[i + len - 1] - s[i - 1];
      chkmax(ans, now);
    }
    printf("Case #%d: %d\n", cs, ans);
  }
}


Kickstart Alarm

大意

給定一個(gè)長度為 N 的正整數(shù)數(shù)組 A 和正整數(shù) K
試求:
\sum_{i=1}^{K}\sum_{L=1}^{N}\sum_{R=L}^{N}\sum_{j=L}^{R}{[A_j\times(j-L+1)^i]}
由于答案可能比較大梗夸,請對 (109 + 7) 取模后輸出层玲。
題目保證 N 不超過 106K 不超過 104 反症。

分析

原表達(dá)式等價(jià)于:
\sum_{L=1}^{N}\sum_{R=L}^{N}\sum_{j=L}^{R}{A_j}\times{\sum_{i=1}^{K}{(j-L+1)^{i}}} = \sum_{L=1}^{N}\sum_{R=L}^{N}{({K}\times{A_L}+\sum_{j=1}^{R-L}{A_{L+j}}\times{\frac{{(j+1)}^{K+1}-j-1}{j}})}
記:
{q_i}=\begin{cases} K,\quad i = 1 \\ \frac{{i}^{K+1}-i}{i - 1},\quad i > 1 \end{cases}
{s_i} = \sum_{j=1}^{i}{q_j}
則有:
{dp_i}=\begin{cases} {K}\times{N},\quad i = 1 \\\\ {dp_{i-1}} - {s_{i-1}} + {q_i},\quad i > 1 \end{cases}
ans=\sum_{i=1}^{N}{{dp_i}\times{A_i}}

代碼

總復(fù)雜度為: O(nlogk) 可以優(yōu)化為 O(n + klogk)

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
#define FOR(i, a, b) for (int (i) = (a); (i) <= (b); (i)++)
#define ROF(i, a, b) for (int (i) = (a); (i) >= (b); (i)--)
#define REP(i, n) FOR(i, 0, (n)-1)
#define sqr(x) ((x) * (x))
#define all(x) (x).begin(), (x).end()
#define reset(x, y) memset(x, y, sizeof(x))
#define uni(x) (x).erase(unique(all(x)), (x).end());
#define BUG(x) cerr << #x << " = " << (x) << endl
#define pb push_back
#define eb emplace_back
#define mp make_pair
#define _1 first
#define _2 second
#define chkmin(a, b) a = min(a, b)
#define chkmax(a, b) a = max(a, b)

const int maxn = 1123456;
const int MOD = 1e9 + 7;

int T;
int N, K, x, y, C, D, E1, E2, F;
int a[maxn], s[maxn], inv[maxn];

void gen() {
  a[1] = (x + y) % F;
  FOR(i, 2, N) {
    int nowx = (ll(C) * x + ll(D) * y + E1) % F;
    int nowy = (ll(D) * x + ll(C) * y + E2) % F;
    x = nowx, y = nowy;
    a[i] = (x + y) % F;
  }
}

inline int add(int a, int b) {
  a += b;
  if (a >= MOD) a -= MOD;
  return a;
}

inline int mul(int a, int b) {
  return ll(a) * b % MOD;
}

int pow_mod(int a, int k) {
  int ret = 1;
  while (k) {
    if (k & 1) ret = mul(ret, a);
    a = mul(a, a);
    k >>= 1;
  }
  return ret;
}

int solve() {
  s[1] = K;
  FOR(i, 2, N) 
    s[i] = add(s[i - 1], mul(add(pow_mod(i, K + 1), MOD - i), inv[i - 1]));
  int now = mul(K, N), ans = mul(now, a[1]);
  FOR(i, 2, N) {
    now = add(now, MOD - s[i - 1]);
    now = add(now, mul(N - i + 1, mul(add(pow_mod(i, K + 1), MOD - i), inv[i - 1])));
    ans = add(ans, mul(now, a[i]));
  }
  return ans;
}

int main() {
  scanf("%d", &T);
  FOR(i, 1, 1e6 + 10) inv[i] = pow_mod(i, MOD - 2);
  FOR(cs, 1, T) {
    scanf("%d%d%d%d%d%d%d%d%d", &N, &K, &x, &y, &C, &D, &E1, &E2, &F);
    gen();
    printf("Case #%d: %d\n", cs, solve());
  }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末辛块,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子铅碍,更是在濱河造成了極大的恐慌润绵,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胞谈,死亡現(xiàn)場離奇詭異尘盼,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)烦绳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進(jìn)店門卿捎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人径密,你說我怎么就攤上這事午阵。” “怎么了享扔?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵趟庄,是天一觀的道長括细。 經(jīng)常有香客問我伪很,道長戚啥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任锉试,我火速辦了婚禮猫十,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘呆盖。我一直安慰自己拖云,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布应又。 她就那樣靜靜地躺著宙项,像睡著了一般。 火紅的嫁衣襯著肌膚如雪株扛。 梳的紋絲不亂的頭發(fā)上尤筐,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天,我揣著相機(jī)與錄音洞就,去河邊找鬼盆繁。 笑死,一個(gè)胖子當(dāng)著我的面吹牛旬蟋,可吹牛的內(nèi)容都是我干的沦补。 我是一名探鬼主播栈雳,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了耻煤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤刃泌,失蹤者是張志新(化名)和其女友劉穎鹰溜,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吞彤,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡我衬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了饰恕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挠羔。...
    茶點(diǎn)故事閱讀 38,643評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖埋嵌,靈堂內(nèi)的尸體忽然破棺而出破加,到底是詐尸還是另有隱情,我是刑警寧澤雹嗦,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布范舀,位于F島的核電站合是,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏锭环。R本人自食惡果不足惜聪全,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望辅辩。 院中可真熱鬧难礼,春花似錦、人聲如沸玫锋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽撩鹿。三九已至谦炬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間节沦,已是汗流浹背键思。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留散劫,地道東北人稚机。 一個(gè)月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像获搏,于是被迫代替她去往敵國和親赖条。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 在C語言中,五種基本數(shù)據(jù)類型存儲空間長度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 3,333評論 0 2
  • ORA-00001: 違反唯一約束條件 (.) 錯(cuò)誤說明:當(dāng)在唯一索引所對應(yīng)的列上鍵入重復(fù)值時(shí)常熙,會觸發(fā)此異常纬乍。 O...
    我想起個(gè)好名字閱讀 5,256評論 0 9
  • 近來總是苦惱寶貝老是要看手機(jī)仿贬,一不給就大哭大鬧,給他吧擔(dān)心看時(shí)間長傷眼睛墓贿,不給吧哭鬧的沒完沒了煩茧泪。 總是...
    華源紙箱閱讀 296評論 0 0
  • 我親愛的咪嚕: “你還要我怎樣,要怎樣聋袋?你突然打開的琴蓋就讓我悲傷队伟。”回想我們的三年半的彈琴生涯幽勒,有個(gè)階段嗜侮,這句被...
    MiluJoy閱讀 161評論 4 7