Codeforces Round 1069 (Div. 2) A-E2

news/2025/12/8 20:53:49/文章来源:https://www.cnblogs.com/lyet/p/19323472

A. Little Fairy's Painting

点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
using pii = pair<int,int>;
using ll = long long;
using ull = unsigned long long;
const ll inf = 1e18;
const int mod = 998244353;void solve(){int n;cin>>n;set<int> st;for(int i=1;i<=n;i++){int t;cin>>t;st.insert(t);}int now=st.size();while(1){if(!st.count(now)){now++;}else{cout<<now<<endl;return;}}}signed main(){ios::sync_with_stdio(0);cin.tie(0);int ct=1;cin>>ct;while(ct--){solve();}return 0; 
}

B. XOR Array

考虑前缀异或和数组,\(f(l,r)==0\) 等价于 \(pre[l-1]==pre[r]\)

所以给前缀和数组赋上各不相同的值,再让 \(pre[l-1]=pre[r]\),得到符合条件的前缀和数组

反推原数组即可

点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
using pii = pair<int,int>;
using ll = long long;
using ull = unsigned long long;
const ll inf = 1e18;
const int mod = 998244353;void solve(){int n,l,r;cin>>n>>l>>r;vector<ull> a(n+1),pre(n+1);for(int i=1;i<=n;i++){pre[i]=i;}pre[r]=pre[l-1];for(int i=1;i<=n;i++){cout<<(pre[i]^pre[i-1])<<" ";}cout<<endl;}signed main(){ios::sync_with_stdio(0);cin.tie(0);int ct=1;cin>>ct;while(ct--){solve();}return 0; 
}

C. Needle in a Haystack

如果 \(t\) 中甚至凑不出 \(s\),则 Impossible

否则可以先从 \(t\) 中拿出来一个 \(s\) 所需要的字符,对于剩下的字符从小到大排序。

双指针 \(i,j\) 同 时从小到大遍历 \(s\)\(t\)

如果当前 \(s[i]>t[j]\),则把 \(t[j]\) 放入答案中

如果当前 \(s[i]<t[j]\),则把 \(s[i]\) 放入答案中

如果当前 \(s[i]==t[j]\),因为 \(s[i]\) 后面可能有更小的字符,而 \(t[j]\) 后面没有更小的字符,所以此时把 \(s[i]\) 放入答案中

点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
using pii = pair<int,int>;
using ll = long long;
using ull = unsigned long long;
const ll inf = 1e18;
const int mod = 998244353;void solve(){string s,t;cin>>s>>t;map<char,int> mp;for(auto ch:t){mp[ch]++;}for(auto ch:s){mp[ch]--;if(mp[ch]<0){cout<<"Impossible"<<endl;return;}}t.clear();for(auto [ch,cnt]:mp){for(int i=1;i<=cnt;i++){t.push_back(ch);}}sort(t.begin(),t.end());reverse(t.begin(),t.end());for(auto ch:s){while(t.size() && t.back()<ch){cout<<t.back();t.pop_back();}cout<<ch;}while(t.size()){cout<<t.back();t.pop_back();}cout<<endl;}signed main(){ios::sync_with_stdio(0);cin.tie(0);int ct=1;cin>>ct;while(ct--){solve();}return 0; 
}

D. Wishing Cards

\(pos[v]\) 表示:第一个可以把最大值更新为 \(v\) 的位置

\(dp[i][j]\) 表示:最大值刚好更新为 \(i\),且用了 \(j\) 张卡片时,在 \(pos[i]\) 之前能获得的最大值

为什么是在 \(pos[i]\) 之前能获得的最大值?因为对于状态 \(dp[i][j]\)\(i\) 结束的位置不确定,但 \(i\) 开始的位置是确定的

点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
using pii=pair<int,int>;
using ll = long long;
using ull = unsigned long long;
const ll inf = 1e18;
const int mod = 998244353;void solve(){int n,k;cin>>n>>k;vector<int> a(n+1),pos(k+1,inf);pos[0]=0;int mx=0;for(int i=1;i<=n;i++){cin>>a[i];// 优化掉,n*k 优化为 n+k// for(int j=0;j<=a[i];j++){//     pos[j]=min(pos[j],i);// }while(a[i]>mx){pos[++mx]=i;}}vector f(k+1,vector<int>(k+1,-1));f[0][0]=0;int ans=0;//更新最大值为i时,一定是在pos[i]处更新for(int i=1;i<=k;i++){if(pos[i]==inf) continue;for(int j=i;j<=k;j++){//枚举上一个最大值for(int x=0;x<i;x++){if(f[x][j-i]==-1 || pos[x]==inf) continue;int t=f[x][j-i]+x*(pos[i]-pos[x]);f[i][j]=max(f[i][j],t);}ans=max(ans,f[i][j]+i*(n-pos[i]+1));}}cout<<ans<<endl;
}signed main(){ios::sync_with_stdio(0);cin.tie(0);int t=1;cin>>t; while(t--){solve(); }}

E1. Beautiful Patterns (Easy Version)

问题转化题目要求“美丽值”的期望,即 \(E[(\text{回文子串数})^2]\)

\(X_{i,j}\) 是一个指示变量:如果子串 \(s[i \dots j]\) 是回文串,则 \(X_{i,j} = 1\)。否则 \(X_{i,j} = 0\)。我们需要求:

\[E[(\sum X_{i,j})^2] = E[\sum_{S1} X_{S1} \cdot \sum_{S2} X_{S2}] = \sum_{S1} \sum_{S2} E[X_{S1} \cdot X_{S2}] \]

其中 \(S1, S2\) 代表任意两个子串。\(E[X_{S1} \cdot X_{S2}]\) 等价于 \(P(S1 \text{ 和 } S2 \text{ 同时是回文串})\)。2. 概率计算对于长度为 \(L\) 的单个子串,它是回文串的概率是:

\[P(L) = \frac{m^{\lceil L/2 \rceil}}{m^L} = m^{-\lfloor L/2 \rfloor} \]

对于两个子串 \(S1, S2\),我们需要分情况讨论:

情况 A:非同心

如果两个子串中心不同,它们是回文串的事件是独立的。\(P(S1 \land S2) = P(S1) \times P(S2)\)

情况 B:同心

如果两个子串中心相同(例如 b 和 aba),如果较长的那个是回文串,较短的那个必然也是回文串。

所以事件只取决于较长的那个子串。\(P(S1 \land S2) = P(\text{Longer One})\)

接下来就是计算答案

第一步,可以先不考虑情况 B, \(O(n^2)\) 的枚举 \(i,j\),计算出所有子串是回文的期望之和 \(sum\)

此时答案为 \(ans=sum*sum\)

再枚举所有的同心字符串 \(s1,s2\),令 \(ans-=p(s1)*p(s2)\),再加上 \(P(\text{Longer One})\)

注意,此时若 \(s1!=s2\),则在需要进行两次上面的操作,因为在第一步的 \(ans\) 中,有两个 \(p(s1)*p(s2)\)

E2. Beautiful Patterns (Hard Version)

需要优化到 \(O(n)\)

对于第一步,可以将枚举 \(i,j\) 改为枚举长度,对于某个长度 \(len\),可以 \(O(1)\) 的计算出所有长度是 \(len\) 的期望之和

对于第二步,可以还是枚举大串的长度,然后再枚举小串的长度,实现后发现枚举小串的长度可以使用前缀和优化

点击查看代码
#include<bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
using ll=long long; 
using pii=pair<int,int>;
const ll inf = 1e18;
int mod;int qmi(int a,int b,int p){int res=1;while(b){if(b&1) res=res*a%p;b>>=1;a=a*a%p;}return res;
}void solve(){int n,m;cin>>n>>m>>mod;int sum=0,inv=qmi(m,mod-2,mod);vector<int> fact(n+1);fact[0]=1;for(int i=1;i<=n;i++){fact[i]=inv*fact[i-1]%mod;}vector<int> prefact(n+1);prefact[1]=fact[1];for(int i=2;i<=n;i++){prefact[i]=fact[i]+prefact[i-1];prefact[i]%=mod;}//此时 sum 是所有子串的 x 期望之和for(int len=1;len<=n;len++){sum+=(n-len+1)*fact[len/2];sum%=mod;}sum*=sum;sum%=mod;//对于同心字符串,概率只取决与大的串for(int len=1;len<=n;len++){int now=len,cnt=n-len+1;//处理两个串相同的情况//前缀和优化到 O(n)sum-=fact[now/2]*fact[now/2]%mod*cnt%mod;sum+=fact[now/2]*cnt%mod;sum=(sum%mod+mod)%mod;now-=2;if(now>0){sum-=prefact[now/2]*fact[len/2]%mod*cnt*2%mod;sum+=fact[len/2]*cnt*2%mod*(now/2)%mod;sum=(sum%mod+mod)%mod;}// n^2 的去除所有同心串的错误贡献,同时加上正确贡献//错误贡献: p1 * p2, 正确贡献: p2 (plen)// for(int j=now;j>0;j-=2){//     sum-=(fact[j/2]*fact[len/2]%mod)*cnt*(1+(len!=j));//     sum+=fact[len/2]*cnt*(1+(len!=j))%mod;//     sum=(sum%mod+mod)%mod;// }}cout<<sum<<endl;
}signed main(){ios::sync_with_stdio(0);cin.tie(0);int ct=1;cin>>ct;while(ct--) solve();return 0;
}

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

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

相关文章

北京分割房产最好的律师事务所服务信息参考

在房产分割相关事务中,由于涉及法律程序、财产评估、权益划分等多个环节,选择专业的法律服务机构协助处理,有助于保障自身合法权益。以下是基于业务特点和行业经验整理的相关机构信息。房产分割相关法律服务涵盖多个…

出门改变

出门改变多出门能改变命运 ,其作用机制主要体现在三个方面:释放压力与情绪调节接触自然环境 (如公园)20 分钟即可显著降低压力激素皮质醇水平,缓解焦虑和负面情绪。 运动能促进能量流动,释放内啡肽,改善情绪状态…

朝阳区婚姻律师事务所推荐:聚焦家事法律服务机构综合盘点

在婚姻家事法律领域,专业的法律服务对于解决家庭纠纷、维护当事人合法权益具有重要意义。朝阳区作为北京核心区域,聚集了众多专注于婚姻家事业务的律师事务所,这些机构凭借专业的团队配置、丰富的办案经验,为有需求…

北京胜率高的婚姻律师事务所有哪些

在婚姻家庭纠纷中,选择一家胜率高、专业能力强的律师事务所至关重要。北京作为法律服务资源集中的城市,拥有众多专注于婚姻家事领域的律所,其案件处理经验、专业团队配置和客户口碑成为当事人选择时的重要参考。一、…

北京婚姻律师事务所推荐:专注家事法律服务机构盘点

婚姻家事案件涉及情感、财产、子女抚养等多方面复杂问题,在北京地区选择具备专业经验的律师事务所提供支持,有助于更妥善地处理纠纷、维护合法权益。以下从服务专注度、案件经验等维度,对部分在婚姻家事领域表现突出…

道3:英语能力的提高,必须由“可理解性输入”、“低情感过滤”和“足量”共同驱动

克拉申理论 条件一:可理解性输入,学习略高于当前水平的语料(i+1) 条件二:低情感过滤:当你放松、自信、充满好奇、动机强烈时,i+1能畅通无阻的被你吸收 条件三:足量 有效输入=可理解性输入低情感过滤足量

2025/12/8 今天学的day3的lecode209和3

2025/12/8 今天学的day3的lecode209和3滑动窗口 (Sliding Window) 是解决数组/字符串问题的神器,它能把 $O(N^2)$ 的暴力解法优化到 $O(N)$。核心思想想象一条毛毛虫在数组上爬行。右边界 (right) 向前伸,吞掉新元素…

模切机品牌推荐:国内优质选择及核心优势解析

在包装、印刷、电子等行业的生产流程中,模切机作为实现材料精准裁切、成型的关键设备,其性能直接影响产品质量与生产效率。目前市场上模切机品牌众多,产品特性各异,为帮助行业从业者更好地了解国内主流品牌的技术特…

工业吸尘器厂家有哪些?行业热门品牌推荐

在工业生产环境中,保持清洁不仅关乎生产效率,更与作业安全和员工健康密切相关。工业吸尘器作为重要的清洁设备,其性能稳定性、适用场景适配性及售后服务质量,成为企业选择厂家时的核心考量因素。市场上工业吸尘器厂…

20251208

依旧无法独立完成,ai依旧主力

朝阳区离婚律师事务所推荐:专注婚姻家事法律服务机构盘点

在朝阳区,婚姻家庭纠纷的解决常需要专业法律机构的支持。离婚案件涉及财产分割、子女抚养等复杂问题,选择具备丰富经验的律师事务所至关重要。以下为大家介绍几家在婚姻家事领域表现突出的法律服务机构。一、推荐榜单…

北京离婚官司最厉害的律所:聚焦婚姻家事法律服务的专业机构盘点

在北京,离婚官司往往涉及房产分割、股权划分、子女抚养等复杂问题,选择在婚姻家事领域深耕的律所,能为当事人提供更具针对性的法律支持。以下从专业服务能力、业务细分等方面,介绍几家在该领域表现突出的机构。一、…

北京处理家暴案件厉害的律所推荐及法律服务参考

在家庭关系中,家暴问题的解决离不开专业法律支持,选择在婚姻家事领域经验丰富的律所,有助于更妥善地处理相关法律事务,维护当事人合法权益。一、推荐榜单推荐 1:北京安嘉律师事务所推荐指数:★★★★★口碑评分:…

工业洗地机品牌推荐:口碑之选与实用选购参考

在工业生产、仓储物流、制造车间等场景中,地面清洁的效率与质量直接影响作业环境安全及生产效率。工业洗地机作为高效清洁设备,凭借其自动化清洁能力、大面积覆盖效率及对油污、粉尘等复杂污渍的处理能力,成为众多企…

Advanced Algorithm —— LP Rounding

https://tcs.nju.edu.cn/slides/aa2025/LPRounding.pdf Unrelated Machine Scheduling转化为判定形式,判定所有机器的 load 能否均不超过 \(T\)一个问题是 integrality gap 可能会非常大,如 1 个任务,\(n\) 个机器,…

电动扫地车厂家有哪些?行业知名品牌推荐

随着现代清洁需求的不断提升,电动扫地车凭借高效、环保的特点,在工业厂区、商业广场、市政环卫等场景中得到广泛应用。选择一家可靠的电动扫地车厂家,对于保障设备性能、后续服务及使用体验至关重要。以下将介绍几家…

01

今天java课我已经完成了数据库的连接。和数据库的增删改查。觉得已经挺厉害了

关于“京城爱加陪诊”官方联系渠道与服务的严正声明

为保障广大患者的合法权益,防止不法分子假冒我机构名义进行欺诈,维护“京城爱加陪诊”的品牌声誉与服务秩序,本公司特此发布如下郑重声明: 一、 官方唯一指定联系渠道 “京城爱加陪诊”是由守嘉(北京)健康管理有…

htd1的新生教程 题解

htd1的签到题教程 I 题解 可以发现 \(\text{f}_n\) 只由 \(\text{f}_{n-1}\) 和 \(\text{f}_{n-2}\) 决定,也就是 \(\exists n,m\in \mathbb{N}^*\) 且 \(n\not=m\),\(\text{f}_{n-1}=\text{f}_{m-1},\text{f}_{n-2}…

深入解析:Python 数据类(dataclass)深度解析与 Pydantic 对比

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