张江蔡
1.Codeforces Round 955 (Div. 2)2.AtCoder Beginner Contest 3633.AtCoder Regular Contest 182(A B C)4.暑假集训CSP提高模拟15.暑假集训CSP提高模拟26.暑假集训CSP提高模拟77.暑假集训CSP提高模拟58.暑假集训 加赛19.暑假集训CSP提高模拟410.暑假集训CSP提高模拟1811.暑假集训CSP提高模拟1712.暑假集训CSP提高模拟 1613.暑假集训CSP提高模拟 ∫[0,6] (x^2)/6 dx14.暑假集训CSP提高模拟1115.暑假集训SCP提高模拟1016.暑假集训PVZ提高模拟917.暑假集训CSP提高模拟818.暑集假训SCP提高拟模2119.[CL-FOOL] CLOI 愚人赛的部分官方题解与小杂谈20.トヨタ自動車プログラミングコンテスト2024#7(ABC 362)21.寒假集训测试2 题目转存22.HEOI2024 题目转存23.高一小学期2
24.张江蔡
25.高一高考集训总结赛26.高一下二调题目转存27.CSP提高组模拟128.Atcoder Beginner Contest 36729.[R18][中国語翻訳]HDKのABC370赛試(ABC370)30.[30] CSP 加赛 131.[33](CSP 集训)CSP-S 模拟 432.[34](CSP 集训)CSP-S 联训模拟 133.[35] (CSP 集训) CSP-S 模拟 534.[36](CSP 集训)CSP-S 模拟 635.AtCoder Beginner Contest 37336.[37](CSP 集训)CSP-S 模拟 737.[39] (多校联训) A层冲刺NOIP2024模拟赛0138.[40](CSP 集训)CSP 联训模拟 239.[42] (多校联训) A层冲刺NOIP2024模拟赛0340.[41] (CSP 集训) CSP-S 模拟 941.[44] (多校联训) A层冲刺NOIP2024模拟赛0442.[45] (多校联训) A层冲刺NOIP2024模拟赛0543.[46] (多校联训) A层冲刺NOIP2024模拟赛0644.パナソニックグループ プログラミングコンテスト2024(ABC 375)45.[47] (CSP 集训) CSP-S 模拟 1146.[49 & 50] (多校联训) A层冲刺NOIP2024模拟赛08 | CSP-S 模拟 1247.[51] (多校联训) A层冲刺NOIP2024模拟赛0948.Atcoder Beginner Contest 37649.Codeforces Round 980 (Div. 2)50.[54] (多校联训) A层冲刺NOIP2024模拟赛1251.[57] (多校联训) A层冲刺NOIP2024模拟赛1552.[61] (多校联训) A层冲刺NOIP2024模拟赛1853.[62] (NOIP 集训) NOIP2024加赛 254.[63] (多校联训) A层冲刺NOIP2024模拟赛1955.[68] (炼石计划) NOIP 模拟赛 #2056.[68] (NOIP集训) NOIP2024 加赛 557.[72] (多校联训) A层冲刺NOIP2024模拟赛2558.[73] (NOIP集训) NOIP2024 加赛 759.[75] (NOIP集训) NOIP2024 加赛 8A.匹配
显然这个题可以用哈希,也不用预处理,直接
#include<bits/stdc++.h>
using namespace std;
#define speed ios::sync_with_stdio(false);
#define input(i) int (i);cin>>(i)
#define tests int cases;cin>>cases;while(cases--)
typedef unsigned long long hdk;
string a,b;char ch;
const hdk num=233;
hdk ah,bh,bnum=1,anow,bnow;
inline hdk ahash(){
ah=ah*num+a[anow];
++anow;return ah;
}
inline hdk bhash(){
bh+=bnum*b[bnow];
--bnow;bnum*=num;
return bh;
}
inline void clear(){
ah=0;bh=0;bnum=1;anow=0;bnow=b.length()-1;
}
signed main(){
#ifdef ONLINE_JUDGE
freopen("string.in","r",stdin);
freopen("string.out","w",stdout);
#endif
speed tests{
input(la);input(lb);
cin>>a;
b=a.substr(0,lb);
cin>>ch;b.push_back(ch);
clear();
int ans=0;
for(int i=1;i<=b.length();++i){
hdk m=ahash(),n=bhash();
if(m==n) ans=i;
}
cout<<ans<<endl;
}
}
B.回家
赛时打的是Tarjan割点,以为是纯板子,然后发现单纯割点跑不对(谴责这个堂食样例跑什么都能过),自己搓了一组数据才发现,割点不一定割的是
赛时代码
#include <bits/stdc++.h>
using namespace std;
#define speed ios::sync_with_stdio(false);
#define input(i) int (i);cin>>(i)
#define tests int cases;cin>>cases;while(cases--)
int n,m;
struct node{
int dfn,low,vis;
bool cut;
}p[200001];
struct hdk{
int to,nxt;
}e[200001];
int head[200001],cnt,enow;
inline void add(int x,int y){
e[++enow]={y,head[x]};
head[x]=enow;
}
bool tarjan(int s,int root){
++cnt;
p[s].dfn=cnt;
p[s].low=cnt;
int child=0;
bool totcheck=false;
for(int i=head[s];i;i=e[i].nxt){
int tem=e[i].to;
if(p[tem].dfn==0){
++child;
bool check=tarjan(tem,s);
if(check) totcheck=true;
p[s].low=min(p[s].low,p[tem].low);
if(p[s].dfn<=p[tem].low){
if(s!=root||child>1){
if(check){
p[s].cut=1;
}
}
}
}
else{
p[s].low=min(p[s].low,p[tem].dfn);
}
}
if(s==n) return true;
return totcheck;
}
signed main(){
#ifdef ONLINE_JUDGE
freopen("home.in","r",stdin);
freopen("home.out","w",stdout);
#endif
speed tests{
cnt=0;enow=0;
memset(p,0,sizeof p);
memset(e,0,sizeof e);
memset(head,0,sizeof head);
cin>>n>>m;
for(int i=1;i<=m;++i){
input(x);input(y);
add(x,y);add(y,x);
}
tarjan(1,1);
int ans=0;
vector<int>an;
for(int i=2;i<=n-1;++i){
if(p[i].cut){
ans++;
an.push_back(i);
}
}
cout<<ans<<endl;
bool flg=false;
if(!an.empty()){
for(int i:an){
if(flg) cout<<" ";
cout<<i;
flg=true;
}
}
cout<<endl;
}
}
那么错哪了呢,显然是统计多了,因为我是从
但是这样的话就不用爆改 tarjan 了,写个 check 搞一下就行了.
考虑到如果
在 的搜索子树中 不在 的搜索子树中
或者
所以跑个割点的基础上判个
#include<bits/stdc++.h>
using namespace std;
bool sc=false;
#define tests int cases;cin>>cases;while(cases--)
#define speed ios::sync_with_stdio(false);
#define input(i) int (i);cin>>(i)
#define debug(i) if(sc)cout<<(i)<<endl
#define clears(i) memset((i),0,sizeof (i))
inline void start(){
#ifndef ONLINE_JUDGE
sc=true;
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
#endif
#ifdef ONLINE_JUDGE
freopen("home.in","r",stdin);
freopen("home.out","w",stdout);
#endif
string x="[TEST]";
debug(x);
debug(time(0));
}
vector<int>an;
int head[2000001],enow;
int n,m;
struct edge{
int u,v,next;
}e[800001];
inline void add(int u,int v){
e[++enow]={u,v,head[u]};
head[u]=enow;
return;
}
int dfn[200001],low[200001],cnt;
inline int check(int u,int v){
if(dfn[v]<=dfn[1]&&dfn[v]>dfn[n]) return 1;
if(dfn[v]<=dfn[n]&&dfn[v]>dfn[1]) return 1;
return 0;
}
void tarjan(int u,int fa){
dfn[u]=low[u]=++cnt;
for(int i=head[u];i;i=e[i].next){
int v=e[i].v;
if(!dfn[v]){
tarjan(v,u);
low[u]=min(low[u],low[v]);
if(low[v]>=dfn[u]&&u!=1&&u!=n&&check(u,v)){
an.push_back(u);
}
}
else if(v!=fa) low[u]=min(low[u],dfn[v]);
}
return;
}
inline void clearall(){
clears(e);
clears(head);
clears(low);
clears(dfn);
enow=0;
cnt=0;
an.clear();
}
signed main(){
start();
speed tests{
clearall();
cin>>n>>m;
while(m--){
int u,v;
cin>>u>>v;
add(u,v);
add(v,u);
}
tarjan(1,0);
sort(an.begin(),an.end());
cout<<an.size()<<endl;
for(int i:an){
cout<<i<<" ";
}
cout<<endl;
}
}
C.寿司
To be added
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!