J. Breakfast

题目描述🥰

AC代码🧠

void solve() {
  int n, m;
  // cin >> n >> m;
  printf("%.2lf", 0.6 * 32 + 1.0 * 20);
}

D. nIM gAME

题目描述🥰

题目思路😀

打表可知无论brz如何拿取,brz都不可能获胜。

AC代码🧠

void solve() {
  int n;
  cin >> n;
  cout << "lose" << endl;
}

A. Paper Watering

题目描述🥰

题目思路😀

首先对于开平方的数,肯定是不会存在重复的可能,所以我们对于不等于1的x,答案至少肯定是k+1,然后我们就可以模拟向下开根的过程,并在过程中统计答案。

Tips:对于n等于1的情况需要进行特判,因为无论是开方还是平方,结果都是1,所以直接特判即可。

AC代码🧠

void solve() {
  int n, k;
  cin >> n >> k;
  if(n == 1){
  cout << 1 <<endl;
  return;
  }
  int ans = k + 1;
  int x = n, t = 0;
  while (x > 1 && t < k) {
    int y = x;
    x = sqrt(x);
    t++, ans++;
    if (x * x != y && x != 1) ans += (k - t);
  }
  cout << ans << endl;
}

Problem E. Checksum

题目描述🥰

题目思路😀

我们需要枚举b串里面的1的个数,对于每一个对应的D进行检验是否有合法的b存在即可

不过debug时间确实太长了😭

AC代码🧠

void solve() {
  int n, k;
  string s;
  cin >> n >> k >> s;
  int res = 0;
  for (int i = 0; i < s.size(); i++) {
    if (s[i] == '1') res++;
  }

  auto check = [&](int cnt) -> bool {
    // 总共这个d是 cnt+res
    string str;
    int sb = res + cnt;
    while (sb) {
      str += (char)(sb % 2 + '0');
      sb /= 2;
    }
    str = str.substr(0, k);
    reverse(str.begin(), str.end());
    int st = 0;
    for (auto x : str)
      if (x == '1') st++;
    if (st != cnt) return false;
    // cout << str << endl;
    int sum = 0;
    for (int i = 0; i < str.size(); i++) sum += pow(2, i) * (str[i] - '0');
    string a(k, '0'), b(k, '0');
    for (int i = 0; i < min(cnt, (int)(a.size() - 1)); i++) a[i] = '1';
    int l = 0;
    // cout << a << endl;
    for (int i = 0; i < a.size(); i++) l += pow(2, i) * (a[i] - '0');
    for (int i = max((int)(a.size() - 1 - cnt + 1), 0LL); i < a.size(); i++)
      b[i] = '1';
    int r = 0;
    // cout << b << endl;
    for (int i = 0; i < b.size(); i++) r += pow(2, i) * (b[i] - '0');

    if (sum >= l && sum <= r) return true;
    return false;
  };

  bool vis = false;
  int t = 0;
  for (int i = 0; i < k; i++) {
    if (check(i)) {
      vis = true;
      t = i + res;
      break;
    }
  }
  if (vis) {
    string ans;
    while (t) {
      ans += (char)(t % 2 + '0');
      t /= 2;
    }
    ans = ans.substr(0, k);
    while (ans.size() < k) {
      ans += "0";
    }
    reverse(ans.begin(), ans.end());
    cout << ans << endl;
  } else
    cout << "None" << endl;
}

 

 posted on 2025-06-29 13:07  熙玺  阅读(19)  评论(0)    收藏  举报

Shu-How Zの小窝

Loading...