首页 > 其他分享 >《如 何 速 通 一 套 题》9.0

《如 何 速 通 一 套 题》9.0

时间:2024-10-03 16:11:10浏览次数:6  
标签:kMod return qpow int ans c1 9.0

邮寄

开场 A 写了 70,然后写 C。

C 大样例过了。

然后 D 写了 30 走人。

B 在知晓题意后,过了样例。

然后撤退了。

70+0+40+50=160。

A 光

我们先预处理出 \(a, b, c, d \le 14\) 的答案(待会儿要考)。

然后,有一种贪心思路:

每次找到亮度需求最多的地方,加上 \(4\) 点亮度,重新计算贡献。

当 \(a, b, c, d \le 14\),直接输出(如果你不知道为什么,那么等待你的将会是 WA 20pts)。

#include <bits/stdc++.h>
using namespace std;

int a, b, c, d, as[50][50][50][50], ans;

int check(int x, int y, int z, int w, int ra, int rb, int rc, int rd) {
  if(ra + rb / 2 + rc / 2 + rd / 4 < x) {
    return 0;
  }
  if(rb + ra / 2 + rd / 2 + rc / 4 < y) {
    return 0;
  }
  if(rc + ra / 2 + rd / 2 + rb / 4 < z) {
    return 0;
  }
  if(rd + rb / 2 + rc / 2 + ra / 4 < w) {
    return 0;
  }
  return 1;
}

int cal(int a, int b, int c, int d) {
  int ans = 155555;
  for(int i = 0; i <= a && i <= ans; i++) {
    for(int j = 0; j <= b && i + j <= ans; j++) {
      for(int k = 0; k <= c && i + j + k <= ans; k++) {
        for(int l = 0; l <= d && i + j + k + l <= ans; l++) {
          if(check(a, b, c, d, i, j, k, l)) {
            ans = min(ans, i + j + k + l);
          }
        }
      }
    }
  }
  return ans;
}

int main() {
  freopen("light.in", "r", stdin);
  freopen("light.out", "w", stdout);
  for(int i = 0; i <= 14; i++) {
    for(int j = 0; j <= 14; j++) {
      for(int k = 0; k <= 14; k++) {
        for(int l = 0; l <= 14; l++) {
          as[i][j][k][l] = cal(i, j, k, l);
        }
      }
    }
  }
  cin >> a >> b >> c >> d;
  for(; a >= 15 || b >= 15 || c >= 15 || d >= 15; ) {
    int tmp = max({a, b, c, d});
    ans += 4;
    if(a == tmp) {
      a -= 4, b -= 2, c -= 2, d -= 1;
    }else {
      if(b == tmp) {
        b -= 4, a -= 2, d -= 2, c -= 1;
      }else {
        if(c == tmp) {
          c -= 4, a -= 2, d -= 2, b -= 1;
        }else {
          d -= 4, b -= 2, c -= 2, a -= 1;
        }
      }
    }
    a = max(a, 0), b = max(b, 0), c = max(c, 0), d = max(d, 0);
  }
  cout << ans + as[a][b][c][d] << '\n';
  return 0;
}

B 爬

讲简单点,就是子集异或和之和。

可以拆位,一位一位统计贡献。

#include <bits/stdc++.h>
#define int ll
using namespace std;
using ll = long long;

const int kMod = int(1e9) + 7;

int n, arr[100010], sum, f;
vector<int> ch[100010];

int qpow(int x, int y) {
  int rs = 1;
  for(; y; y >>= 1) {
    if(y & 1) {
      rs = rs * x % kMod;
    }
    x = x * x % kMod;
  }
  return rs;
}

int cal(const vector<int> &x, int c, bool f = 0) {
  int ans = 0;
  for(int i = 30; i >= 0; i--) {
    int c1 = 0, c0 = 0;
    for(auto j : x) {
      c1 += ((j >> i) & 1);
      c0 += !((j >> i) & 1);
    }
    if(!((c >> i) & 1)) {
      if(c1) {
        ans = (ans + (qpow(2, c0) * qpow(2, c1 - 1) - (!f) * c1 + kMod) % kMod * qpow(2, i)) % kMod;
      }
    }else {
      ans = (ans + (qpow(2, c0) * (c1? qpow(2, c1 - 1) : 1) - 1 + kMod) % kMod * qpow(2, i)) % kMod;
    }
  }
  return ans;
}

void DFS(int x) {
  vector<int> s;
  if(x != 1) {
    s.push_back(arr[x]);
  }
  for(auto i : ch[x]) {
    DFS(i);
    s.push_back(arr[i]);
  }
  if(x != 1) {
    //cout << x << ' ' << cal(s, 0) << '\n';
    sum = (sum + cal(s, 0) * qpow(2, n - 1 - s.size())) % kMod;
  }else {
    //cout << x << ' ' << cal(s, arr[x], 1) << '\n';
    sum = (sum + cal(s, arr[x], 1) * qpow(2, n - 1 - s.size())) % kMod;
  }
}

signed main() {
  freopen("climb.in", "r", stdin);
  freopen("climb.out", "w", stdout);
  cin >> n;
  for(int i = 1; i <= n; i++) {
    cin >> arr[i];
  }
  for(int i = 2; i <= n; i++) {
    cin >> f;
    ch[f].push_back(i);
  }
  DFS(1);
  cout << sum << '\n';
  return 0;
}
//Off-Topic: It should be "crawl"

C 字符串

贪心,先贪断点的,然后贪连续的。

#include <bits/stdc++.h>
using namespace std;

int t, n, m, a, b, c, ans, cnt;

int main() {
  freopen("string.in", "r", stdin);
  freopen("string.out", "w", stdout);
  for(cin >> t; t--;) {
    cin >> n >> m >> a >> b >> c;
    ans = (n - 1) / a + (m - 1) / b + 2, cnt = min(n, m / c);
    for(int i = 1; i <= cnt; i++) {
      int val = 2 * i;
      if(c > b) {
        val += (c - 1) / b * i;
      }
      if(n - i > 0) {
        val += 1 + (n - i - 1) / a;
      }
      if(m - c * i > 0) {
        val++;
        int rst = m - c * i - 1;
        if(c <= b) {
          int nv = min(i, rst / (b + 1 - c));
          val += nv, rst -= nv * (b + 1 - c);
        }else {
          int nv = min(i, rst / (b - (c - 1) % b));
          val += nv, rst -= nv * (b - (c - 1) % b);
        }
        val += rst / b;
      }
      ans = max(ans, val);
    }
    cout << ans << '\n';
  }
  return 0;
}

标签:kMod,return,qpow,int,ans,c1,9.0
From: https://www.cnblogs.com/leavenothingafterblog/p/18440299/speedrunv9

相关文章

  • Codeforces Round 976 (Div. 2) and Divide By Zero 9.0
    目录写在前面A签到B数学,模拟C二进制,拆位D暴力,并查集E概率DPF写在最后写在前面补题地址:https://codeforces.com/gym/104128。上大分失败呃呃呃呃有点过载了妈的我现在应该去打会儿游戏。A签到等价于求\(n\)在\(k\)进制下各位之和,写一个类似快速幂的东西。///*By......
  • WinToUSB 9.0 离线注册
    WinToUSB9.0qt程序,注册验证代码与EasyUEFI大同小异,这里仅记录相关类、函数地址关联https://www.cnblogs.com/DirWang/p/18149030目录WinToUSB9.0CActivationDlgCActivationDlgQMetaObject__dCActivationRegisterPageCActivationRegisterPageQMetaObject__dCActivationOff......
  • [使用目前最新版]HybridCLR6.9.0+YooAsset2.2.4实现纯C# Unity热更新方案 (一)
    1.前言什么是热更新游戏或者软件更新时,无需重新下载客户端进行安装,而是在应用程序启动的情况下,在内部进行资源或者代码更新Unity目前常用热更新解决方案HybridCLR,Xlua,ILRuntime等Unity目前常用资源管理解决方案AssetBundles,Addressable,YooAsset等在这里我们采用HybridCLR......
  • 使用Copilot AI解决openwrt 19.07 nas samba在Windows网络[网上邻居]中无法看到的问题
    1.问题缘由我的一台openwrt路由可以在Win11的网络中看到,另一台自己刷的openwrt19.07nas却在win11网络中看不到,但直接用IP可以访问其samba3.6共享的文件夹。为何这台不能被Windows发现呢?2.问题解决自己搜索了下,找不到解决方案,问了下Googlegemini,回答不能解决,有点答非所闻......
  • Spire.PDF for .NET 10.9.0
    Spire.PDFfor.NETisaprofessionalPDFAPIappliedtocreating,writing,editing,handlingandreadingPDFfileswithoutanyexternaldependencieswithin.NET(C#,VB.NET,ASP.NET,.NETCore,.NET5.0,.NET6.0,.NET7.0,MonoAndroidandXamarin.iOS)......
  • 敏感词 v0.19.0 新特性之敏感词单个编辑,不必重复初始化
    敏感词系列sensitive-word-admin敏感词控台v1.2.0版本开源sensitive-word-adminv1.3.0发布如何支持分布式部署?01-开源敏感词工具入门使用02-如何实现一个敏感词工具?违禁词实现思路梳理03-敏感词之StopWord停止词优化与特殊符号04-敏感词之字典瘦身05-敏感词之DFA......
  • [昌哥IT课堂]|欢迎 MySQL 9.0,回顾 Oracle 在 8.0 版中的管理(译)
    对于新兴技术和社区的管理是相对容易的。经过29年发展,MySQL已成为全球数百万用户中使用最广泛且备受信任的开源数据库之一。在这一规模的社区领导中可能存在复杂性。我们努力寻求稳定和创新的平衡,为客户提供稳定可预测的平台,并为技术用户提供新功能。Oracle通过投资于技术的工......
  • Sa-Token的v1.39.0自定义鉴权注解怎么玩
    个人博客:无奈何杨(wnhyang)个人语雀:wnhyang共享语雀:在线知识共享Github:wnhyang-Overview简介在Sa-Token最新的v1.39.0版本的更新日志中有这么一句话核心:升级:重构注解鉴权底层,支持自定义鉴权注解了。[重要]正巧最近有看一个关于鉴权的东西,顺便看一下吧!常见的自定义注解鉴权目标:对于......
  • 一文看完MySQL 9.0新特性!
    本文总结自MySQL8.4以来,在MySQL9.0中新增、废弃、更改和删除的内容。MySQL9.0中新增或更改的功能。1MySQL9.0新特性1VECTOR类型支持MySQL9.0支持VECTOR列类型。向量是一个数据结构,它由条目列表(4字节浮点值)组成,可以表示为二进制字符串值或列表格式字符串。VECT......
  • 2024.09.08字节
    1.钱包小苯有n个钱包,其中第i个钱包装了ai元,他每天都会恰好使用一个钱包中的钱去购物,尽可能多地购买一种单价为k元的物品,日复一日,直到所有钱包中的钱都分别买不起此物品。在小苯在开始日复一日地购物前,可以向任意一些钱包中再加入一些钱,但总共加入的钱数不超过m.现在小苯想知......