首页 > 其他分享 >2023冲刺国赛模拟11

2023冲刺国赛模拟11

时间:2023-06-07 19:23:05浏览次数:41  
标签:11 typedef int mid long maxn 国赛 2023 getchar

A. 天地一抹红

同行的转移是 \(kx + b\) 的形式,可以李超树维护

其实可以斜率优化,但是懒得动脑子

code
#include<bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, ll> pil;

int read(){
	int x = 0; char c = getchar();
	while(!isdigit(c))c = getchar();
	do{x = x * 10 + (c ^ 48); c = getchar();}while(isdigit(c));
	return x;
}
const int maxm = 2e4 + 55, maxn = 105;

ll calc(pil line, int x){return 1ll * line.first * x + line.second;}
int w[maxn][maxm], h[maxn][maxm], a[maxn][maxm];
int n, m, F;
struct seg{
	pil t[maxm << 2 | 1];
	void build(int x, int l, int r){
		t[x] = {0, -1e18};
		if(l == r)return;
		int mid = (l + r) >> 1;
		build(x << 1, l, mid);
		build(x << 1 | 1, mid + 1, r);
	}
	void modify(int x, int l, int r, pil line){
		int mid = (l + r) >> 1;
		if(calc(t[x], mid) < calc(line, mid))swap(t[x], line);
		if(l == r)return;
		if(calc(t[x], l) < calc(line, l))modify(x << 1, l, mid, line);
		if(calc(t[x], r) < calc(line, r))modify(x << 1 | 1, mid + 1, r, line);
	}
	ll query(int x, int l, int r, int v){
		ll ans = calc(t[x], v);
		if(l == r)return ans;
		int mid = (l + r) >> 1;
		if(v <= mid)return max(ans, query(x << 1, l, mid, v));
		else return max(ans, query(x << 1 | 1, mid + 1, r, v));
	}
}T;
ll f[maxn][maxm];
int main(){
	freopen("red.in","r",stdin);
	freopen("red.out","w",stdout);
	n = read(), m = read(), F = read();
	for(int i = 1; i <= n; ++i)
		for(int j = 1; j <= m; ++j)
			w[i][j] = read();
	for(int i = 1; i <= n; ++i)
		for(int j = 1; j <= m; ++j)
			h[i][j] = read();
	for(int i = 1; i <= n; ++i)
		for(int j = 1; j <= m; ++j)
			a[i][j] = read();
    for(int i = 1; i <= n; ++i){
		T.build(1, 1, m); ll mx = -1e18;
		for(int j = 1; j <= m; ++j){
			if(i == 1 && j == 1)f[i][j] = F;
			else f[i][j] = max(f[i - 1][j] - w[i - 1][j], T.query(1, 1, m, a[i][j]));
			mx = max(f[i][j] - w[i][j], mx);
			T.modify(1, 1, m, pil(h[i][j], mx));
		}
	}
	printf("%lld\n", max(-1ll, f[n][m]));
	return 0;
}

B. 最简根式

不难发现是求 \(\sum_{a = 1}^n\sum_{b = 1}^{n}[\gcd(a, b) 含平方因子]\)

枚举 \(gcd\) 的平方因子,简单容斥得到答案为

\(-\sum_{i = 2}^{\sqrt n} \mu(i)(\lfloor\frac{n}{i^2}\rfloor)^2\)

对 \(\lfloor\frac{n}{i^2}\rfloor\) 整除分块

预处理一部分,杜教筛一部分,复杂度是对的

code
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, ll> pil;

ll read() {
    ll x = 0;
    char c = getchar();
    while (!isdigit(c)) c = getchar();
    do {
        x = x * 10 + (c ^ 48);
        c = getchar();
    } while (isdigit(c));
    return x;
}
const int mod = 998244353;
const int maxn = 6e7 + 5;
int prime[maxn], cnt, mu[maxn];
bool flag[maxn];
void init(int n) {
    mu[1] = 1;
    for (int i = 2; i <= n; ++i) {
        if (!flag[i])
            prime[++cnt] = i, mu[i] = -1;
        for (int j = 1; j <= cnt && prime[j] * i <= n; ++j) {
            flag[i * prime[j]] = true;
            if (i % prime[j] == 0)
                break;
            mu[i * prime[j]] = -mu[i];
        }
    }
    for (int i = 2; i <= n; ++i) mu[i] += mu[i - 1];
}
unordered_map<ll, int> mp;
int calc(ll n) {
    if (n <= 6e7)
        return mu[n];
    if (mp.count(n))
        return mp[n];
    ll ans = 1;
    for (ll l = 2, r; l <= n; l = r + 1) {
        r = n / (n / l);
        ans = (ans - 1ll * (r - l + 1) % mod * calc(n / l)) % mod;
    }
    ans = (ans + mod) % mod;
    return mp[n] = ans;
}
void solve() {
    ll n = read(), ans = 0;
    for (ll l = 2, r; l * l <= n; l = r + 1) {
        r = sqrt(n / (n / (l * l)));
        ans = (ans +
               1ll * ((n / (l * l)) % mod) * ((n / (l * l)) % mod) % mod * (calc(r) - calc(l - 1)) % mod) %
              mod;
    }
    printf("%lld\n", ((mod - ans) % mod + mod) % mod);
}
int main() {
    freopen("math.in", "r", stdin);
    freopen("math.out", "w", stdout);
    init(6e7);
    int t = read();
    for (int i = 1; i <= t; ++i) solve();
    return 0;
}

C. 图床

\(hash\) 找出出现的字符串个数 \(k\)

\[ P(n) = \frac{\binom{n}{k}(k^m - (k - 1)^m)}{n^m} \]

找到最接近的 \(n\)

这是个单峰函数

又有 \(P(n) < P(n + 1) <=> (n + 1 - k)(n + 1)^m < (n + 1)n^m\)

可以直接二分

code
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;
const int mod = 2140207;
int read() {
    int x = 0;
    char c = getchar();
    while (c < 'a' || c > 'z') c = getchar();
    do {
        x = (x * 29ll + (c - 'a' + 1)) % mod;
        c = getchar();
    } while (c >= 'a' && c <= 'z');
    return x;
}
int ln, rn, m;
bitset<mod> rem;
void solve() {
    int k = 0;
    for (int i = 1; i <= m; ++i) {
        int tmp = read();
        if (!rem[tmp])
            rem[tmp] = true, ++k;
    }
    int l = max(ln, k), r = rn;
    while (l < r) {
        int mid = (l + r) >> 1;
        if (log2(mid - k + 1) + log2(mid + 1) * m < log2(mid + 1) + log2(mid) * m)
            l = mid + 1;
        else
            r = mid;
    }
    rem.reset();
    printf("%d\n", l);
}

int main() {
    freopen("pic.in", "r", stdin);
    freopen("pic.out", "w", stdout);
    int T;
    double a, b, c, d;
    scanf("%d%lf%lf%lf%lf%d%d%d", &T, &a, &b, &c, &d, &ln, &rn, &m);
    for (int i = 1; i <= T; ++i) solve();
    return 0;
}

标签:11,typedef,int,mid,long,maxn,国赛,2023,getchar
From: https://www.cnblogs.com/Chencgy/p/17464331.html

相关文章

  • Leetcode 2611. 老鼠和奶酪
    题目:有两只老鼠和 n 块不同类型的奶酪,每块奶酪都只能被其中一只老鼠吃掉。下标为i 处的奶酪被吃掉的得分为:如果第一只老鼠吃掉,则得分为 reward1[i] 。如果第二只老鼠吃掉,则得分为 reward2[i] 。给你一个正整数数组 reward1 ,一个正整数数组 reward2 ,和一个非负整......
  • 【20230607】【用Python让Excel飞起来】 第一章 python 快速上手 I
    001安装Anacondaanaconda.com直接下载,然后安装记得安装的时候将path和link.py点上,不然回头去配置环境变量有一些麻烦如何判断成功安装在CMD中输入conda-V即可查看002安装配置pycharm直接安装即可,官网下载,然后安装注意pycharm的pro版本是收费的,edu邮箱可以免费1年......
  • 生产环境windows服务器Oracle11gR2安装配置
    1.生产环境Windows主机环境规划  os:windows2008  ip:192.168.1.51  主机:ippuxwebdb  数据库:oracle11.2.0.4+补丁  数据库名:fgwebdb  主机  物理内存:内存16G/32G,CPU:i3/i5/i7硬盘空间500G  网络要求:有线  2.Windows服务器系统安装  1.VMware虚......
  • 欧奈儿行业 RPS 排名,一图览全貌 2023-06-07
    自动复盘2023-06-07k线图是最好的老师,点击详情图可以看到行业20日RPS的排名,最底下子图是行业rps走势线跟踪板块总结:成交额超过100亿排名靠前,macd柱由绿转红公众hao:醉卧梦星河欧奈尔行业RPS排名天天更新追踪主力行业趋势更容......
  • 链家广州二手房数据 2023
    还记得在2019年的夏天曾经用R爬过一份广州在lianjia.com放盘数据(博客1,博客2,博客3)。翻看当时的记录:我稚嫩地惊叹着广州二手房放盘量已经超过50,000套了。尔后,疫情袭来,三年封锁。这个夏天当我用Python再次爬lianjia.com广州的放盘数据,却坦然地接受超120,000套巨量放盘数......
  • 【2023-06-05】三胎前提
    20:00那曾柔软细腻的心,被这世界狠狠嘲笑过,但我的本质不可摧毁,我心安,释然,从容生出新叶。                                                 ——黑塞何太问我还敢不敢要......
  • 【2023-06-06】难得平淡
    20:00窗间梅熟落蒂,墙下笋成出林。连雨不知春去,一晴方觉夏深。                                                 ——范成大·《喜晴》昨晚下班回到家里时,已经10点半了......
  • 【每日一题】LeetCode 1185.一周中的第几天
    题目给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。输入为三个整数:day、month和year,分别表示日、月、年。您返回的结果必须是这几个值中的一个{“Sunday”,“Monday”,“Tuesday”,“Wednesday”,“Thursday”,“Friday”,“Saturday”}。示例输入:day=31,......
  • 【LeetCode】11月每日一题刷题记录
    575.分糖果classSolution{public:intdistributeCandies(vector<int>&candyType){unordered_set<int>S;for(autoc:candyType)S.insert(c);returnmin(candyType.size()/2,S.size());}};237.删除链表中的节点由于是单链表......
  • 2023我的第一个个人软件作品 无忧桶装水配送管理系统 出来了
    已经多年没发布过共享软件作品了,曾几何时共享软件在国内是多么的流行,随着各类原因的产生,国内共享软件的开发者也越来越少了,记得最早接触共享软件这一行业是在2000年左右吧,随着时间的流失和各类原因自已也慢慢没有从事这方面的业余创作了,到了2018年左右又突然来了激情想搞一两个软......