Kickstart 2019 Practice Round 解题报告



比赛链接

Number Guessing

大意

本题为交互题。
已知一个隐藏的正整数 P 在一个已知的区间 (0, B] 中。每次询问输入正整数 Q,返回 PQ 的大小关系。一共有不超过 30 次询问机会,试求 P
题目保证正整数 B 不超过 109

分析

这个题就是一个二分,也没什么需要注意的细节。

代码

#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

大意

给定一个长度为 N 的数组。初始情况下所有数均可选。
定义一回合为 (依次进行):

  1. 选择一个尚未被选择或丢弃的数,要求与已经选择的任意数字邻接;
  2. 丢弃一个尚未被选择的数,要求在当且数组的最左边或最右边。

第一回合可以开始于任意位置。
当数组中所有的数字均被选择或丢弃时,游戏结束。此时所有被选择的数字之和为这局游戏的得分。试求最高可能得分。
题目保证 N 不超过 5 × 106

分析

不难发现,被选择的数字永远是连续的且不管如何选择,总有一半(向上取整)的数字可以被选。
所以这个问题就被转化成了给定长度的连续和最值问题。

代码

总复杂度为: 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

大意

给定一个长度为 N 的正整数数组 A 和正整数 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

分析

原表达式等价于:
\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}}

代码

总复杂度为: O(nlogk) 可以优化为 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());
  }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,320评论 0 2
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,167评论 0 9
  • 近来总是苦恼宝贝老是要看手机,一不给就大哭大闹,给他吧担心看时间长伤眼睛,不给吧哭闹的没完没了烦。 总是...
    华源纸箱阅读 294评论 0 0
  • 我亲爱的咪噜: “你还要我怎样,要怎样?你突然打开的琴盖就让我悲伤。”回想我们的三年半的弹琴生涯,有个阶段,这句被...
    MiluJoy阅读 161评论 4 7