Codeforces 1053 (Div.2)

news/2025/9/26 16:39:15/文章来源:https://www.cnblogs.com/SRLN/p/19110966

Codeforces 1053 (Div.2)

C. Incremental Stay

题意: 有n个人,存在2*n个时刻,分配这2n个时刻给予n个人进出的时间,输出当博物馆容量为(1-n)时,这些人呆在博物馆的总时长最大值

思路: 对于\(i \in [1, n]\)匹配前(i - 1)个时刻和后(i - 1)个时刻为(i - 1)个游客进出的时间,中间剩余的一个游客进进出出,维护奇数前缀和与偶数前缀和,然后模拟即可。

Tag: 前缀和, 贪心匹配

点击查看代码
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ld = long double;
using ull = unsigned long long;
#define endl "\n"
typedef pair<int, int> Pii;
#define REP(i, n) for (int i = 0; i < (n); ++i)
#define REP3(i, m, n) for (int i = (m); (i) < int(n); ++ (i))
#define rep(i,b) for(int i=(int)(0);i<(int)(b);i++)
#define rng(i,a,b) for(int i=int(a);i<int(b);i++)
#define ALL(x) begin(x), end(x)
#define rrep(i,a,b) for(int i=a;i>=b;i--)
#define fore(i,a) for(auto &i:a)
#define all(s) (s).begin(),(s).end()
#define drep2(i, m, n) for (int i = (m)-1; i >= (n); --i)
#define drep(i, n) drep2(i, n, 0)
#define rever(vec) reverse(vec.begin(), vec.end())
#define sor(vec) sort(vec.begin(), vec.end())
#define fi first
#define FOR_(n) for (ll _ = 0; (_) < (ll)(n); ++(_))
#define FOR(i, n) for (ll i = 0; (i) < (ll)(n); ++(i))
#define se second
#define pb push_back
#define P pair<ll,ll>
#define PQminll priority_queue<ll, vector<ll>, greater<ll>>
#define PQmaxll priority_queue<ll,vector<ll>,less<ll>>
#define PQminP priority_queue<P, vector<P>, greater<P>>
#define PQmaxP priority_queue<P,vector<P>,less<P>>
#define NP next_permutation
#define die(a) {cout<<a<<endl; return;}
#define dier(a) {return a;}
//const ll Mod = 1000000009;
const ll Mod = 998244353;
//const ll Mod = 1000000007;
#define inv(a) q_pow((ll)a, Mod - 2)
const ll inf = 4000000000000000000ll;
const ld eps = ld(0.00000000001);
static const long double pi = 3.141592653589793;
template<class T>void vcin(vector<T> &n){for(int i=0;i<int(n.size());i++) cin>>n[i];}
template<class T,class K>void vcin(vector<T> &n,vector<K> &m){for(int i=0;i<int(n.size());i++) cin>>n[i]>>m[i];}
template<class T>void vcout(vector<T> &n){for(int i=0;i<int(n.size());i++){cout<<n[i]<<" ";}cout<<endl;}
template<class T>void vcin(vector<vector<T>> &n){for(int i=0;i<int(n.size());i++){for(int j=0;j<int(n[i].size());j++){cin>>n[i][j];}}}
template<class T>void vcout(vector<vector<T>> &n){for(int i=0;i<int(n.size());i++){for(int j=0;j<int(n[i].size());j++){cout<<n[i][j]<<" ";}cout<<endl;}cout<<endl;}
void yes(bool a){cout<<(a?"yes":"no")<<endl;}
void YES(bool a){cout<<(a?"YES":"NO")<<endl;}
void Yes(bool a){cout<<(a?"Yes":"No")<<endl;}
void possible(bool a){ cout<<(a?"possible":"impossible")<<endl; }
void Possible(bool a){ cout<<(a?"Possible":"Impossible")<<endl; }
void POSSIBLE(bool a){ cout<<(a?"POSSIBLE":"IMPOSSIBLE")<<endl; }
#define FOR_R(i, n) for (ll i = (ll)(n)-1; (i) >= 0; --(i))
template<class T>auto min(const T& a){ return *min_element(all(a)); }
//template<class T>auto max(const T& a){ return *max_element(all(a)); }
template<class T,class F>void print(pair<T,F> a){cout<<a.fi<<" "<<a.se<<endl;}
template<class T>bool chmax(T &a,const T b) { if (a<b) { a=b; return 1; } return 0;}
template<class T>bool chmin(T &a,const T b) { if (b<a) { a=b; return 1; } return 0;}
template<class T> void ifmin(T t,T u){if(t>u){cout<<-1<<endl;}else{cout<<t<<endl;}}
template<class T> void ifmax(T t,T u){if(t>u){cout<<-1<<endl;}else{cout<<t<<endl;}}
ll fastgcd(ll u,ll v){ll shl=0;while(u&&v&&u!=v){bool eu=!(u&1);bool ev=!(v&1);if(eu&&ev){++shl;u>>=1;v>>=1;}else if(eu&&!ev){u>>=1;}else if(!eu&&ev){v>>=1;}else if(u>=v){u=(u-v)>>1;}else{ll tmp=u;u=(v-u)>>1;v=tmp;}}return !u?v<<shl:u<<shl;}
ll modPow(ll a, ll n, ll Mod) { if(Mod==1) return 0;ll ret = 1; ll p = a % Mod; while (n) { if (n & 1) ret = ret * p % Mod; p = p * p % Mod; n >>= 1; } return ret; }
vector<ll> divisor(ll x){ vector<ll> ans; for(ll i = 1; i * i <= x; i++){ if(x % i == 0) {ans.push_back(i); if(i*i!=x){ ans.push_back(x / ans[i]);}}}sor(ans); return ans; }
ll pop(ll x){return __builtin_popcountll(x);}
ll poplong(ll x){ll y=-1;while(x){x/=2;y++;}return y;}
P hyou(P a){ll x=fastgcd(abs(a.fi),abs(a.se));a.fi/=x;a.se/=x;if(a.se<0){a.fi*=-1;a.se*=-1;}return a;}
P Pplus(P a,P b){ return hyou({a.fi*b.se+b.fi*a.se,a.se*b.se});}
P Ptimes(P a,ll b){ return hyou({a.fi*b,a.se});}
P Ptimes(P a,P b){ return hyou({a.fi*b.fi,a.se*b.se});}
P Pminus(P a,P b){ return hyou({a.fi*b.se-b.fi*a.se,a.se*b.se});}
P Pgyaku(P a){ return hyou({a.se,a.fi});}ll q_pow(ll x, ll n, ll Mod) {ll res = 1;for (; n > 0; n /= 2) {if (n % 2) res = res * x % Mod;x = x * x % Mod;}return res % Mod;
}ll i, j;
ll n, m, k, x;
ll l, r, p, q;
ll a, b;
void solve() {cin >> n;m = 2LL * n;vector<ll> a(m + 1, -1);for(int i = 1; i <= m; ++i) cin >> a[i];vector<ll> pre1(n + 1, 0);for(int i = 1; i <= n; ++i) pre1[i] = pre1[i - 1] + (a[2 * i] - a[2 * i - 1]);vector<ll> pre2(n + 1, 0);for(int i = 1; i <= (n - 1); ++i) pre2[i] = pre2[i - 1] + (a[2 * i + 1] - a[2 * i]);ll sm = 0;cout << pre1[n] << " ";for(int i = 1; i <= (n - 1); ++i) {sm += a[2LL * n - i + 1] - a[i];if(i % 2 == 1) {cout << sm + max(0LL, pre2[(m - i - 1) / 2] - pre2[(i - 1) / 2]) << " ";} else {cout << sm + max(0LL, pre1[(m - i) / 2] - pre1[(i / 2)]) << " ";}}cout << endl; return;
}
int main() {std::ios::sync_with_stdio(false);std::cout.tie(0);int t;cin >> t;while(t--) solve();
}

D. Grid Counting

题意: 给你一个n*n的网格图,再给你一个n长度的数组a,必须满足以下三个条件

  1. (1<=k<=n)第k行必须有ak个黑色格子
  2. (1<=k<=n),有且只有一个索引\(max(xi, yi) = k\)
  3. (1<=k<=n),有且只有一个索引\(max(xi, n + 1 -yi) = k\)

思路: 先忽略条件1,把条件2转换成左上方每一层的L型状格子有且只有一个格子,条件3则对应右上方的每一层有且只有一个格子,经过相互限制可以发现,可以选择的只有上方的倒三角形状的格子,且每一列必须有且只有有一个来满足条件2,3,接下来加上条件1跑一遍组合数即可。

Tag:组合数学,图形分析(需要转化为图上的前缀和直觉)

点击查看代码
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ld = long double;
using ull = unsigned long long;
#define endl "\n"
typedef pair<int, int> Pii;
#define REP(i, n) for (int i = 0; i < (n); ++i)
#define REP3(i, cmp, n) for (int i = (cmp); (i) < int(n); ++ (i))
#define rep(i,b) for(int i=(int)(0);i<(int)(b);i++)
#define rng(i,a,b) for(int i=int(a);i<int(b);i++)
#define ALL(x) begin(x), end(x)
#define rrep(i,a,b) for(int i=a;i>=b;i--)
#define fore(i,a) for(auto &i:a)
#define all(s) (s).begin(),(s).end()
#define drep2(i, cmp, n) for (int i = (cmp)-1; i >= (n); --i)
#define drep(i, n) drep2(i, n, 0)
#define rever(vec) reverse(vec.begin(), vec.end())
#define sor(vec) sort(vec.begin(), vec.end())
#define fi first
#define FOR_(n) for (ll _ = 0; (_) < (ll)(n); ++(_))
#define FOR(i, n) for (ll i = 0; (i) < (ll)(n); ++(i))
#define se second
#define pb push_back
#define P pair<ll,ll>
#define PQminll priority_queue<ll, vector<ll>, greater<ll>>
#define PQmaxll priority_queue<ll,vector<ll>,less<ll>>
#define PQminP priority_queue<P, vector<P>, greater<P>>
#define PQmaxP priority_queue<P,vector<P>,less<P>>
#define NP next_permutation
#define die(a) {cout<<a<<endl; return;}
#define dier(a) {return a;}
//const ll Mod = 1000000009;
const ll Mod = 998244353;
//const ll Mod = 1000000007;
#define inv(a) q_pow((ll)a, Mod - 2)
const ll inf = 4000000000000000000ll;
const ld eps = ld(0.00000000001);
static const long double pi = 3.141592653589793;
template<class T>void vcin(vector<T> &n){for(int i=0;i<int(n.size());i++) cin>>n[i];}
template<class T,class K>void vcin(vector<T> &n,vector<K> &cmp){for(int i=0;i<int(n.size());i++) cin>>n[i]>>cmp[i];}
template<class T>void vcout(vector<T> &n){for(int i=0;i<int(n.size());i++){cout<<n[i]<<" ";}cout<<endl;}
template<class T>void vcin(vector<vector<T>> &n){for(int i=0;i<int(n.size());i++){for(int j=0;j<int(n[i].size());j++){cin>>n[i][j];}}}
template<class T>void vcout(vector<vector<T>> &n){for(int i=0;i<int(n.size());i++){for(int j=0;j<int(n[i].size());j++){cout<<n[i][j]<<" ";}cout<<endl;}cout<<endl;}
void yes(bool a){cout<<(a?"yes":"no")<<endl;}
void YES(bool a){cout<<(a?"YES":"NO")<<endl;}
void Yes(bool a){cout<<(a?"Yes":"No")<<endl;}
void possible(bool a){ cout<<(a?"possible":"impossible")<<endl; }
void Possible(bool a){ cout<<(a?"Possible":"Impossible")<<endl; }
void POSSIBLE(bool a){ cout<<(a?"POSSIBLE":"IMPOSSIBLE")<<endl; }
#define FOR_R(i, n) for (ll i = (ll)(n)-1; (i) >= 0; --(i))
template<class T>auto min(const T& a){ return *min_element(all(a)); }
//template<class T>auto max(const T& a){ return *max_element(all(a)); }
template<class T,class F>void print(pair<T,F> a){cout<<a.fi<<" "<<a.se<<endl;}
template<class T>bool chmax(T &a,const T b) { if (a<b) { a=b; return 1; } return 0;}
template<class T>bool chmin(T &a,const T b) { if (b<a) { a=b; return 1; } return 0;}
template<class T> void ifmin(T t,T u){if(t>u){cout<<-1<<endl;}else{cout<<t<<endl;}}
template<class T> void ifmax(T t,T u){if(t>u){cout<<-1<<endl;}else{cout<<t<<endl;}}
ll fastgcd(ll u,ll v){ll shl=0;while(u&&v&&u!=v){bool eu=!(u&1);bool ev=!(v&1);if(eu&&ev){++shl;u>>=1;v>>=1;}else if(eu&&!ev){u>>=1;}else if(!eu&&ev){v>>=1;}else if(u>=v){u=(u-v)>>1;}else{ll tmp=u;u=(v-u)>>1;v=tmp;}}return !u?v<<shl:u<<shl;}
ll modPow(ll a, ll n, ll Mod) { if(Mod==1) return 0;ll ret = 1; ll p = a % Mod; while (n) { if (n & 1) ret = ret * p % Mod; p = p * p % Mod; n >>= 1; } return ret; }
vector<ll> divisor(ll x){ vector<ll> ans; for(ll i = 1; i * i <= x; i++){ if(x % i == 0) {ans.push_back(i); if(i*i!=x){ ans.push_back(x / i);}}}sor(ans); return ans; }
ll pop(ll x){return __builtin_popcountll(x);}
ll poplong(ll x){ll y=-1;while(x){x/=2;y++;}return y;}
P hyou(P a){ll x=fastgcd(abs(a.fi),abs(a.se));a.fi/=x;a.se/=x;if(a.se<0){a.fi*=-1;a.se*=-1;}return a;}
P Pplus(P a,P b){ return hyou({a.fi*b.se+b.fi*a.se,a.se*b.se});}
P Ptimes(P a,ll b){ return hyou({a.fi*b,a.se});}
P Ptimes(P a,P b){ return hyou({a.fi*b.fi,a.se*b.se});}
P Pminus(P a,P b){ return hyou({a.fi*b.se-b.fi*a.se,a.se*b.se});}
P Pgyaku(P a){ return hyou({a.se,a.fi});}const int MX = 2e5 + 5; // 组合数上限
ll q_pow(ll x, ll n) {ll res = 1;for (; n > 0; n /= 2) {if (n % 2) res = res * x % Mod;x = x * x % Mod;}return res % Mod;
}
// 组合逆元模板
long long fac[MX]; // 组合数除数
long long inv_fac[MX];  // 组合数被除数(通过费马小定理转化为逆元)
void init() {fac[0] = 1;for (int i = 1; i < MX; i++) {fac[i] = fac[i - 1] * i % Mod;}// 1 * 2 * 3 * 4 * 5 * 6   除数个数累计// for(int i = 0; i < 10; ++i) std::cout << fac[i] << std::endl;inv_fac[MX - 1] = q_pow(fac[MX - 1], Mod - 2);  // 费马小定理转化for (int i = MX - 1; i > 0; i--) {inv_fac[i - 1] = inv_fac[i] * i % Mod;}return;
}
long long comb(int n, int k) {  //  n 个数里面选k个数// inv_fac[n - k] 抵消fac[n - k]if(k == 0) return 1;return fac[n] * inv_fac[k] % Mod * inv_fac[n - k] % Mod;
}ll i, j;
ll n, k;
ll l, r, p, q;void solve() {cin >> n;vector<ll> a(n+1, 0);ll sum=0;for(int i=1;i<=n;++i){ cin>>a[i]; sum+=a[i]; }if(sum != n) {cout << 0 << endl;return;}vector<ll> d;d.reserve(n);for(ll j = 1; j <= n; ++j) d.pb(min(j, n + 1 - j));sort(d.begin(), d.end());// vcout(d);// prevector<ll> pre(n + 1, 0);for(int i = 1; i <= n; ++i) pre[i] = (pre[i - 1] + a[i]);// ll res = 1;for(int j = 1; j <= n; ++j) {ll dval = d[j - 1];ll tmp = pre[dval] - (j - 1);if(tmp <= 0) {res = 0;break;}res = res * (tmp % Mod) % Mod;}if(res == 0) {cout << 0 << endl;return;}for(int i = 1; i <= n; ++i) {res = res * inv_fac[a[i]] % Mod;res %= Mod;}cout << res << endl;
}int main() {std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);init();int t;cin >> t;while(t--) solve();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/916962.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

抗体药物偶联物(ADCs)生物分析:拆解 “靶向导弹” 体内轨迹的核心技术

在肿瘤治疗领域,抗体药物偶联物(ADCs)堪称 “精准导弹”—— 凭借抗体的靶向性将细胞毒性载荷递送至肿瘤细胞,既突破了传统化疗的非特异性毒性,又解决了部分抗体药物疗效不足的问题。截至 2024 年,全球已有十余款…

深入解析:文献阅读 | iMetaMed | FigureYa:一个标准化可视化框架,用于增强生物医学数据解释和研究效率

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

spring boot方案利用Torna生成在线接口文档

spring boot方案利用Torna生成在线接口文档pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

C#关键字 unchecked与checked - 教程

C#关键字 unchecked与checked - 教程2025-09-25 12:22 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !im…

做营销型网站的教程网站建设方案论文1500

6&#xff0c;BGP的基本配置 1&#xff0c;BGP建邻的基本关系 1&#xff0c;EBGP对等体关系直接建邻 [r1]bgp 1----启动BGP进程---后面的1不是进程号&#xff0c;而是配置路由器所在AS的AS号 [r1-bgp] [r1-bgp]router-id 1.1.1.1---配置RID [r1-bgp]peer 12.0.0.2 as-number-…

网站建设分析徐州整站优化

shell的模拟实现 我们知道shell是一个永不退出的程序&#xff0c;所以他应该是一个死循环&#xff0c;并且shell为了防止影响到自己&#xff0c;我们在命令行上输入的所有命令都是由shell的子进程来执行的&#xff0c;所以它应该要有创建子进程的相关函数&#xff0c;当然也会…

网站外链建设工作计划建站合作

第3部分 hashCode() 的作用 hashCode() 的作用是获取哈希码&#xff0c;也称为散列码&#xff1b;它实际上是返回一个int整数。这个哈希码的作用是确定该对象在哈希表中的索引位置。 hashCode() 定义在JDK的Object.java中&#xff0c;这就意味着Java中的任何类都包含有hashCo…

详细介绍:微服务的适用边界:从金融科技到量子计算的架构哲学

详细介绍:微服务的适用边界:从金融科技到量子计算的架构哲学pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Con…

静态网站可以做哪些wordpress有后端吗

一&#xff0e;选择题 1、适宜采用inline定义函数情况是&#xff08;C&#xff09; A. 函数体含有循环语句 B. 函数体含有递归语句‘、考科一 ’ C. 函数代码少、频繁调用 D. 函数代码多、不常调用 2、假定一个函数为A(int i4, int j0) {;}, 则执行“A (1);”语句后&#xff0c…

网站开发招标参数学校网站建设的应用意义案例

来源&#xff1a;SpringBoot 那些天生自带 Buff 的工具类&#xff0c;你用过几个&#xff1f; 断言 断言是一个逻辑判断&#xff0c;用于检查不应该发生的情况 Assert 关键字在 JDK1.4 中引入&#xff0c;可通过 JVM 参数-enableassertions开启 SpringBoot 中提供了 Assert …

不用js可以做网站吗网站建设费应开具互联网信息服务吗

本文主要向大家介绍了MySQL数据库之在CentOS7上安装MySQL5.7 &#xff0c;通过具体的内容向大家展现&#xff0c;希望对大家学习MySQL数据库有所帮助。获取RPM包# wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm列出RPM包里都有哪些文件# rpm -q…

公司网站建设应注意事项北京的软件公司集中在哪个区

文章目录 9.1 DApp 的架构和设计9.1.1 基础知识解析更深入的理解实际操作技巧 9.1.2 重点案例&#xff1a;去中心化社交媒体平台案例 Demo&#xff1a;创建去中心化社交媒体平台案例代码SocialMedia.sol - 智能合约前端界面 测试和验证拓展功能 9.1.3 拓展案例 1&#xff1a;去…

59网站一起做网店普宁网站 代备案

1.开启时钟 把需要使用的USART和GPIO的时钟打开 2.GPIO初始化 把TX配置成复用输出&#xff0c;RX配置成输入 3.配置USART 直接使用一个结构体即可将所有参数配置完成 4.开关控制 如果需要仅发送的功能&#xff0c;就直接开启USART&#xff…

网站后台程序手机网页怎么改成电脑版

现在越来越多的人都开始通过二维码的方式来传递文件&#xff0c;将word、pdf、excel、pdf等格式的文件通过扫码的方式展示或者下载文件&#xff0c;这种方式有很多的优势&#xff0c;包括传播速度快成本低&#xff0c;只需要生成一张二维码图片&#xff0c;就可以让其他人能够同…

使用IOT-Tree整合复杂计算模型(含AI模型),并对接现场设备优化控制(节能提效)技能方案

使用IOT-Tree整合复杂计算模型(含AI模型),并对接现场设备优化控制(节能提效)技能方案pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important…

单独

单独Q2的季度工作总结: 重点工作任务(含项目) 重点工作任务完成情况 "目标设定说明: 目标设定要符合SMART原则(Specific具体的、Measurable可衡量的、Attainable可达到的、Ralevant相关的、Time-based有时间…

为什么应该测试无JavaScript的页面体验

本文探讨了JavaScript可能失效的各种场景(如网络问题、浏览器扩展限制等),介绍了渐进增强的实践方法,并说明了当页面必须依赖JavaScript时的优雅降级方案。通过具体代码示例展示如何构建更具韧性和可访问性的网站。…

完整教程:UE5小游戏开发 - 武士决斗

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

经典三层架构项目(3-tier architecture)中应用依赖倒置原则(DIP)的理性权衡

经典三层架构项目(3-tier architecture)中应用依赖倒置原则(DIP)的理性权衡1 DIP核心思想与三层架构概述 依赖倒置原则(Dependency Inversion Principle,DIP)作为SOLID原则中的重要组成部分,其核心主张是高层模…

网站开发费入什么科目个人简介html代码简单

前言 JavaScript 的核心 ECMAScript 描述了该语言的语法和基本对象&#xff1b; DOM 描述了处理网页内容的方法和接口&#xff1b; BOM 描述了与浏览器进行交互的方法和接口。 ECMAScript、DOM 和 BOM 尽管 ECMAScript 是一个重要的标准&#xff0c;但它并不是 JavaScript 唯一…