当前位置: 首页 > news >正文

OI 笑传 #23

今天是 ABC429 CDEF。被 E 卡到破防说是。代码能力场。

ABC429C

给三元组的样子分个类,\(AAB,ABB,ABA\) 这三种。

对于前两种,用个桶前缀后缀一下算贡献即可。

对于中间的,我们动态维护每种数左边和右边数量的乘积,因为每次只会改一个数,维护是简单的。

剩下就是代码了,一遍写对。

code

Show me the code
#define rd read()
#define mkp make_pair
#define ls p<<1
#define rs p<<1|1
#define rep(i,a,b) for( int i=(a); i<=(b); ++i)
#define per(i,a,b) for( int i=(a); i>=(b); --i)
#include<bits/stdc++.h>
using namespace std;
typedef long long i64;
typedef unsigned long long u64;
typedef unsigned int u32;
typedef __int128 i128;
i64 read(){i64 x=0,f=1;char c=getchar();while(c>'9'||c<'0'){if(c=='-') f=-1;c=getchar();}while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+(c^48);c=getchar();}return x*f;
}
const int N=2e5+5;
i64 a[N];
i64 t[N];
i64 t1[N];
i64 t2[N];
pair<i64,i64> t3[N];
int main(){int n;cin>>n;for(int i=1;i<=n;i++){cin>>a[i];t[a[i]]++;}i64 ans=0;for(int i=1;i<=n;i++){t1[a[i]]++;if(t1[a[i]]>=2){ans+=(t1[a[i]]-1)*(n-i-(t[a[i]]-t1[a[i]]));}t3[i].second=t[i];}for(int i=n;i>=1;i--){t2[a[i]]++;if(t2[a[i]]>=2){ans+=(t2[a[i]]-1)*(i-1-(t[a[i]]-t2[a[i]]));}}i64 msum=0;for(int i=1;i<=n;i++){msum-=t3[a[i]].first*t3[a[i]].second;ans+=msum;t3[a[i]].first++;t3[a[i]].second--;msum+=t3[a[i]].first*t3[a[i]].second;}cout<<ans;return 0;
}

ABC429D

朴素二分题,首先离散化,把每个放了人的位置的答案计算出来即可。

注意环的处理和相邻人的位置贡献的计算。

赛时好像这题也卡飞不少人?

code

Show me the code
#define rd read()
#define mkp make_pair
#define ls p<<1
#define rs p<<1|1
#define rep(i,a,b) for( int i=(a); i<=(b); ++i)
#define per(i,a,b) for( int i=(a); i>=(b); --i)
#include<bits/stdc++.h>
using namespace std;
typedef long long i64;
typedef unsigned long long u64;
typedef unsigned int u32;
typedef __int128 i128;
i64 read(){i64 x=0,f=1;char c=getchar();while(c>'9'||c<'0'){if(c=='-') f=-1;c=getchar();}while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+(c^48);c=getchar();}return x*f;
}
const int N=2e5+5;
i64 a[N];
i64 t[N];
i64 t1[N];
i64 t2[N];
pair<i64,i64> t3[N];
int main(){int n;cin>>n;for(int i=1;i<=n;i++){cin>>a[i];t[a[i]]++;}i64 ans=0;for(int i=1;i<=n;i++){t1[a[i]]++;if(t1[a[i]]>=2){ans+=(t1[a[i]]-1)*(n-i-(t[a[i]]-t1[a[i]]));}t3[i].second=t[i];}for(int i=n;i>=1;i--){t2[a[i]]++;if(t2[a[i]]>=2){ans+=(t2[a[i]]-1)*(i-1-(t[a[i]]-t2[a[i]]));}}i64 msum=0;for(int i=1;i<=n;i++){msum-=t3[a[i]].first*t3[a[i]].second;ans+=msum;t3[a[i]].first++;t3[a[i]].second--;msum+=t3[a[i]].first*t3[a[i]].second;}cout<<ans;return 0;
}

ABC429E

真正的红如温。后 50min 全是这个题。

你说得对但是 5min 想懂了再 5min 就写完了。但是它就是不过啊。

普通 BFS 题,每个 S 算贡献即可。用 BFS 处理出每个点到一个 S 的最短路和不同 S 的非严格次短路。

但就是这种东西我也能写挂把。

赛后又写了一遍就过了,我咋看不出这两种写法的区别呢?

code

Show me the code
#define rd read()
#define mkp make_pair
#define ls p<<1
#define rs p<<1|1
#define rep(i,a,b) for( int i=(a); i<=(b); ++i)
#define per(i,a,b) for( int i=(a); i>=(b); --i)
#include<bits/stdc++.h>
using namespace std;
typedef long long i64;
typedef unsigned long long u64;
typedef unsigned int u32;
typedef __int128 i128;
i64 read(){i64 x=0,f=1;char c=getchar();while(c>'9'||c<'0'){if(c=='-') f=-1;c=getchar();}while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+(c^48);c=getchar();}return x*f;
}
const int N=3e5;
vector<int> e[N];
int d1[N],d2[N];
int f1[N],f2[N];
struct work{int v;int w;int id;
};
queue<work> q;
int main(){int n;cin>>n;int m;cin>>m;for(int i=1;i<=m;i++){int u,v;cin>>u>>v;e[u].push_back(v);e[v].push_back(u);}string s;cin>>s;s=' '+s;memset(d1,0x3f,sizeof d1);memset(d2,0x3f,sizeof d2);for(int i=1;i<=n;i++){if(s[i]=='S'){q.push(work{i,0,i});f1[i]=i;d1[i]=0;}}while(q.size()){int u=q.front().v;int w=q.front().w;int id=q.front().id;q.pop();w++;for(int v:e[u]){if(d1[v]==0x3f3f3f3f){d2[v]=d1[v];d1[v]=w;f1[v]=f2[v];f1[v]=id;}else if(d2[v]==0x3f3f3f3f&&f1[v]!=id){d2[v]=w;f2[v]=id;}else continue;q.push(work{v,w,id});}}for(int i=1;i<=n;i++){if(s[i]=='D'){cout<<d1[i]+d2[i]<<'\n';}}return 0;
}

ABC429F

线段树题,写不完了晚上回来再写。

http://www.hskmm.com/?act=detail&tid=39480

相关文章:

  • 2025年半自动包装机厂家权威推荐榜:食品/医药/化工行业专用机型精选,高效稳定与性价比之选
  • [ java 锁 - 04 - Integer o = 1 作为 锁的问题]
  • 2025年提升机厂家权威推荐榜:自动提升机、垂直提升机、斗式提升机、物料提升设备源头厂家精选
  • 2025年自动提升机厂家权威推荐榜单:专业制造与高效解决方案深度解析
  • [java 锁 - 03 重入写法 ]
  • 2025年包装机厂家权威推荐榜:自动包装机,半自动包装机,高效包装设备源头厂家精选与选购指南
  • golang: gin项目常用第三方库
  • ssh: 连接报错
  • python3: ubuntu上安装时报错: No module named zlib
  • OI 笑传 #22
  • 实用指南:Golang 中的字符串:常见错误和最佳实践
  • 2025年自动上料机厂家推荐排行榜:螺旋上料机,真空上料机,粉末上料机,颗粒上料机专业制造商精选指南
  • 接口幂等性
  • 20232315 2025-2026-1 《网络与系统攻防技术》实验三实验报告
  • 2025长沙1024程序员日:为开发者职业发展插上腾飞之翼
  • 2067C cf1500
  • 兼职日志-mysqlpython出图
  • 彻底清除浏览器缓存
  • 2025东莞包装机/自动包装机/半自动包装机厂家推荐垚林机械,精准高效耐用!
  • 使用pyautogui完成简单的游戏功能--皇室战争降杯
  • 2025 年 10 月系统门窗厂商榜单揭晓,专业系统智造与品牌保障口碑优选
  • 2025 年 10 月系统门窗厂商榜单揭晓,专业工艺制造与品牌保障口碑优选
  • 2025自动上料机厂家推荐东莞市垚林机械,高效输送精准控料!
  • Marchenko imaging-Kees Wapenaar-2014
  • MX-S 10-25 比赛总结
  • 7天阅读betaflight
  • 鱼书学习笔记
  • 2025年店铺装修设计施工一体化推荐榜单:服装店/化妆品店/火锅店/商场店/餐厅/健身房/美容美发/珠宝店等专业装修公司精选
  • 学弟模拟赛题解报告 - idle
  • XML-RPC接口安全漏洞分析与防护