Codeforces Round 921 (Div. 2) (C贪心 D期望数学? E线段树)

A:

长度最小就是每k个小写字母形成一组,这样能保证最短的拥有全部子序列

#include<bits/stdc++.h>
using namespace std;
const int N = 1e6+10,M=2*N,mod=998244353;
#define int long long
typedef long long LL;
typedef pair<int, int> PII;
typedef unsigned long long ULL;const long long inf=1e18;int n,m,k;void solve()
{cin>>n>>m;for(int i=1;i<=n;i++){for(int j=0;j<m;j++){cout<<(char)(j+'a');}}cout<<"\n";
} signed main()
{cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);int t=1;cin>>t;while(t--) solve();
}

B:

让gcd最大就是让 n个数都是这个gcd的倍数

假设 x%n==0才能通过n个数分配完x

#include<bits/stdc++.h>
using namespace std;
const int N = 1e6+10,M=2*N,mod=998244353;
#define int long long
typedef long long LL;
typedef pair<int, int> PII;
typedef unsigned long long ULL;const long long inf=1e18;int n,m,k;void solve()
{cin>>n>>m;vector<int> a;for(int i=1;i<=n/i;i++){if(n%i==0){a.push_back(i);if(i*i!=n){a.push_back(n/i);}}}int res=0;for(auto x:a){if(n/x>=m) res=max(res,x);}cout<<res<<"\n";
} signed main()
{cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);int t=1;cin>>t;while(t--) solve();
}

C:

脑子短路的一题...

考虑如何构造最短的字符串满足有n长度的所有k个字母的子序列

没错!那就是A的结论,要有n组完整的包括k个字母否则就会缺失

考虑正常思考

假设第一字母 后面如果要包含n长度的k个子序列 那么 后面至少有n-1组都有k个字母的序列

#include<bits/stdc++.h>
using namespace std;
const int N = 1e6+10,M=2*N,mod=998244353;
#define int long long
typedef long long LL;
typedef pair<int, int> PII;
typedef unsigned long long ULL;const long long inf=1e18;int n,m,k;void solve()
{map<char,int> mp;cin>>n>>k>>m;string s;cin>>s;s="?"+s;int i=1;int cnt=0;string res="";while(i<=m&&cnt<n){mp.clear();int j=i;int sum=0;while(j<=m&&sum<k){int c=s[j]-'a';if(c<k&&mp[c]==0) sum++;mp[c]++;j++;}if(sum<k) break;cnt++;res+=s[j-1];i=j;}if(cnt==n) cout<<"YES\n";else{cout<<"NO\n";for(int i=0;i<k;i++){if(mp[i]==0){cout<<res<<string(n-res.size(),char('a'+i))<<"\n";return ;}}cout << res << string(n - res.size(), 'a') << '\n';}
} signed main()
{cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);int t=1;cin>>t;while(t--) solve();
}

D:

考虑每个朋友对的贡献

当前 x朋友和y朋友的友谊是 z

那么根据期望定义选中的次数可以是0 1 2 3 4... k

那么假设当前选中的次数是 j

P=n*(n-1)/2 即从n个人里面选出来 一对朋友 就会有P种不同情况

那么选一次的情况下,同时选x朋友和y朋友的概率就是  1/P

不能同时选出来就是 (P-1)/P

那么概率就是 (z*j+(j-1)*j)/2)  *C(k,j)*  (1/P)^(j) * ((P-1)/P)^(k-j)

就是 第一个式子就是贡献嘛 j*z 加上 1+2+...+j-1 等差数列

然后后面就是k轮里面跳j轮

然可以发现右边式子都相同,合并Z就好了

#include<bits/stdc++.h>
using namespace std;
const int N = 1e6+10,M=2*N,mod=1e9+7;
#define int long long
typedef long long LL;
typedef pair<int, int> PII;
typedef unsigned long long ULL;const long long inf=1e18;int n,m,k;
int fact[N],infact[N];int qmi(int a,int k,int p){int res=1;while(k){if(k&1) res=(LL) res*a%p;a=(LL)a*a%p;k>>=1;}return res;
}
void init(){fact[0]=infact[0]=1;for(int i=1;i<N;i++){fact[i]=(LL)fact[i-1]*i%mod;infact[i]=(LL)infact[i-1]*qmi(i,mod-2,mod)%mod;}
}
int C(int a,int b){if(b<0||b>a) return 0;return ((LL)fact[a] * infact[b] % mod * infact[a - b] % mod);
}
int inv(int x){return qmi(x,mod-2,mod);
}
int a[N];
void solve()
{cin>>n>>m>>k;int sum=0,tot=n*(n-1)/2%mod;for(int i=1;i<=m;i++){int x,z,y;cin>>x>>y>>z;sum+=z;}int res=0;tot%=mod;for(int j=1;j<=k;j++){res+=C(k,j)*((__int128)j*sum%mod+j*(j-1)%mod*inv(2)%mod*m%mod)%mod*qmi(inv(tot),j,mod)%mod*qmi(tot-1,k-j,mod)%mod*qmi(inv(tot),k-j,mod);res%=mod;}cout<<res<<"\n";//C(k,j)*(1/sum)^j
} signed main()
{cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);int t=1;init();cin>>t;while(t--) solve();
}

E:

最多n个码头

先想两个码头之间的贡献咋计算

2            6

假设2 和6是码头

那么我们要计算中间的答案就是

v[2]*(6-3) + v[2]*(6-4) +v[2]*(6-5)

=v[2]*(1+2+3)=v[2]*(3*(3+1)/2) 就是等差数列后一项

所以线段树直接维护这个就好了

比如第二个点维护 2到6中间的贡献

然后修改操作

我们需要插入给4

那么我们直接在4这里面插入4到6的船的贡献

找4前面的点2,把点2修改成2到4的点

所以我们需要一个set二分logn查找前一个已经存在的码头

查询操作

        1 [      4                 8     ]  10

上面有的数字都是码头,没有的化就是船

然后思考咋计算贡献

答案就是 4+8的点的贡献+ v[1]*(4-l)  - v[8]*10-r即可

#include<bits/stdc++.h>
using namespace std;
const int N =3e5+10,M=2*N,mod=1e9+7;typedef long long LL;
typedef pair<int, int> PII;
typedef unsigned long long ULL;const long long inf=1e18;int n,m,k;
PII a[N];
LL sum[N*4];
int now[N];
void pushup(int u){sum[u]=sum[u<<1]+sum[u<<1|1];
}
void modify(int u,int l,int r,int c,int x,int y){if(l==r){sum[u]=1ll*x*y*(y-1)/2;return ;}int mid=l+r>>1;if(c<=mid) modify(u<<1,l,mid,c,x,y);else modify(u<<1|1,mid+1,r,c,x,y);pushup(u);
}
LL query(int u,int l,int r,int L,int R){if(L>R) return 0;if(l>=L&&r<=R) return sum[u];int mid=l+r>>1;LL res=0;if(L<=mid) res+=query(u<<1,l,mid,L,R);if(R>mid) res+=query(u<<1|1,mid+1,r,L,R);return res;
}
void solve()
{int q;set<int> st;st.insert(0);cin>>n>>m>>q;for(int i=1;i<=m;i++) cin>>a[i].first;for(int i=1;i<=m;i++){cin>>a[i].second;now[a[i].first]=a[i].second;}sort(a+1,a+1+m);for(int i=1;i<m;i++){modify(1,1,n,a[i].first,a[i].second,a[i+1].first-a[i].first);}for(int i=1;i<=m;i++)st.insert(a[i].first);while(q--){int op,l,r;cin>>op>>l>>r;if(op==1){auto it=st.lower_bound(l);modify(1,1,n,l,r,*it-l);it--;modify(1,1,n,*it,now[*it],l-*it);now[l]=r;st.insert(l);}else{auto it1=st.lower_bound(l);auto it2=st.lower_bound(r);LL res=0;int L=*it1;int len1=L-l+1;int R=*it2;int len2=R-r;//中间的部分res+=query(1,1,n,*it1,*prev(it2));//加去左边多的部分it1--;res+=1ll*now[*it1]*len1*(len1-1)/2;//减去右边多的部分it2--;res-=1ll*now[*it2]*len2*(len2-1)/2;cout<<res<<"\n";}}
} signed main()
{cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);int t=1;//init();//cin>>t;while(t--) solve();
}

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

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

相关文章

GoJS—交互式图表开发的神器(海量案例)

一、GoJS是什么&#xff1a; GoJS是一个用于创建交互式可视化图表和图形的JavaScript库。它提供了丰富的功能和工具&#xff0c;使开发人员能够轻松地构建各种类型的图表&#xff0c;包括流程图、组织结构图、网络拓扑图等。GoJS具有灵活的布局和样式设置&#xff0c;可以通过简…

新概念英语第二册(43)下

【Key structures】Can and Be able to 情态助动词 can/could 用于表示请求别人允许或答复时的情况: Can/Could I borrow you pen? can 有时可以表示可能性&#xff1a; I can have lunch with your tomorrow if you like. 在表示天生的或学到的能力时&#xff0c;can/could 可…

Python中Numba库装饰器

一、运行速度是Python天生的短板 1.1 编译型语言&#xff1a;C 对于编译型语言&#xff0c;开发完成以后需要将所有的源代码都转换成可执行程序&#xff0c;比如 Windows 下的.exe文件&#xff0c;可执行程序里面包含的就是机器码。只要我们拥有可执行程序&#xff0c;就可以随…

基于STM32的智能手环设计与实现

需要原理图工程&#xff0c;源码&#xff0c;PCB工程的朋友收藏&#xff0c;这篇文章关注我&#xff0c;私我吧&#xff01;&#xff01;&#xff01; 基于STM32的智能手环设计与实现 摘要一、研究背景及意义二、实现功能三、系统方案设计系统方案设计框图3.1 单片机芯片选择3…

getCookie(key)网页JS获取COOKE一项值

这里讲解一下获取document.cookie里面的指定项目值的两种方法&#xff1a; 第一种&#xff1a; let allcookies document.cookie; function getCookie(cookie_name) {var allcookies document.cookie;var cookie_pos allcookies.indexOf(cookie_name); //索引的长度// 如…

[HGAME 2023 week1]easyenc

查壳 IDA打开 字符串打开就发现了明显的标志 int __cdecl main(int argc, const char **argv, const char **envp) {__int64 v3; // rbx__int64 v4; // raxchar v5; // alchar *v6; // rcxint v8[10]; // [rsp20h] [rbp-19h]char v9; // [rsp48h] [rbpFh]__int128 v10[3]; //…

C 练习实例49-宏#define命令练习3

#ifdef if define 如果define定义了神马&#xff0c;便执行该语句。如果没定义这个&#xff0c;则执行#else语句。注意结尾要加#endif语句 代码&#xff1a; #include <stdio.h> #define Max #define MAXIMUM(x,y) (x,y)?x:y #define MINIMUM(x,y) (x,y)?y:x …

【Java】SpringMVC参数接收(一)

1、接收单个参数 &#xff08;1&#xff09;直接接收参数 RequestMapping("/hello") RestController public class HelloSpring {RequestMapping("/t2")public String t2(String name){return "name" name;} } 当没有传入参数时&#xff0c;返…

《汇编语言:基于linux环境》eatsyscall汇编程序

当阅读此书&#xff0c;作者编写了一个这样的程序&#xff0c;我也想试一下。照着书中的代码写了下&#xff0c;可以使用nasm正常编译&#xff0c;ld也可以正常链接&#xff0c;但是无法正常执行。总是报错。 ; nasm -f elf64 -g -F stabs eatsyscall.asm ; ld -o eatsysca…

sqli-labs靶场第七关

7、第七关 id1 --单引号报错,id1" --双引号不报错,可以判断是单引号闭合 id1) --也报错&#xff0c;尝试两个括号闭合&#xff0c;id1)) --不报错 接下来用脚本爆库 import stringimport requestsnumbers [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] letters2 list(string.ascii_…

【销售数据分析】客户画像分析之总体画像

前一段时间把财务分析的一些报表及分析场景讲得差不多了&#xff0c;接下来想和大家讲一下销售分析中的一些场景。今年看了许多企业的数据&#xff0c;发现大家2023年比疫情三年更难&#xff01;从财务的几张报表就会发现净利润亏损的居多&#xff0c;而亏损的主要原因基本上都…

【多线程笔记04】多线程之停止线程、取消线程任务的几种方式

这篇文章,主要介绍多线程之停止线程、取消线程任务的几种方式【知识星球】。 目录 一、问题描述 1.1、需求描述 1.2、技术方案

gitlab-runner注册到gitlab时报错:ERROR: Registering runner... failed xxxxxxxx

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。 文章目录 场景报错分析解决场景 docker部署gitlab-runner后注册到gitlab 在进入gitlab-runner容…

Easysearch:语义搜索、知识图和向量数据库概述

什么是语义搜索&#xff1f; 语义搜索是一种使用自然语言处理算法来理解单词和短语的含义和上下文以提供更准确的搜索结果的搜索技术。旨在更好地理解用户的意图和查询内容&#xff0c;而不仅仅是根据关键词匹配&#xff0c;还通过分析查询的语义和上下文来提供更准确和相关的…

什么是DevOps?DevOps是如何提效的?

文章目录 前言一、DevOps是什么&#xff1f;二、DevOps是如何提效的&#xff1f;总结 前言 随着软件行业的不断发展&#xff0c;如何打破开发、运维、测试之间的边界&#xff0c;使工作更加高效成为了企业的新一个难题&#xff0c;本文将向大家介绍DevOps文化&#xff0c;以及…

巨杉数据库携手广发证券入选2023大数据“星河”案例

近期&#xff0c;中国信息通信研究院、中国通信标准化协会大数据技术标准推进委员会(CCSA TC601)连续七年共同组织的大数据“星河&#xff08;Galaxy&#xff09;”案例征集活动发布公示。本次征集活动&#xff0c;旨在通过总结和推广大数据产业发展的优秀成果&#xff0c;推动…

C++多线程1(复习向笔记)

创建线程以及相关函数 当用thread类创建线程对象绑定函数后&#xff0c;该线程在主线程执行时就已经自动开始执行了,join起到阻塞主线程的作用 #include <iostream> #include <thread> #include <string> using namespace std; //测试函数 void printStrin…

前后端交互

1-前后端交互概述 1.1接口调用方式 原生ajax 基于jQuery的ajax fetch&#xff08;ajax的升级版&#xff09; axios &#xff08;第三方的库&#xff09; 1.2 url 地址格式有哪些 传统的url http://host:port/path?query#fragment http协议----https&#xff0c;ftp ho…

被鹅厂最新开源AI绘画工具PhotoMaker圈粉了,多风格头像生成器就靠它了!

要说本周AIGC开源爆火项目&#xff0c;腾讯的PhotoMaker 可以入选其一。而 PhotoMaker 是腾讯Arc于4天前开源上线到GitHub的&#xff0c;更有一众互联网科技领域大V体验推荐&#xff0c;当前Star已经有4.7k了&#xff01; 相信小编这篇文章发布时star预测可能达到5k了。而 Pho…

js打地鼠

文章目录 1实现效果2代码实现 1实现效果 游戏难度&#xff1a;简单&#xff0c;一般&#xff0c;困难&#xff0c;噩梦&#xff08;控制setInterval的time参数&#xff09; 按钮功能&#xff1a;结束&#xff08;可以通过修改gameScore的值来修改判定结束的分数&#xff09;&am…