AtCoder-ABC415 真题直播解析预告
创始人
2025-07-19 16:48:49
0

AtCoder (ABC 414)于上周六晚20:00进行,周日晚 19:00我们在B站进行了AtCoder Beginner Contest 414的题解直播讲解,以下为本次直播讲解内容及文字解析。

AtCoder (ABC 415)将于今天晚上20:00进行,周日晚 19:00我们在B站进行了AtCoder Beginner Contest 415的题解直播讲解,请同学们关注。

ABC414主讲老师:清华大学 吴老师(NOI2021银牌)

ABC415主讲老师:清华 殷老师(NOI2019银牌)

欢迎加入ABC交流QQ群咨询、沟通、交流群密码:AtCoder

ABC414比赛真题讲解

题目列表:

题目地址:https://atcoder.jp/contests/abc414/tasks

ABC413题解及参考程序(文字版)

========================================

A

#include

intmain{ intn,L,R; scanf( "%d%d%d",&n,&L,&R); intans = 0; for( inti = 1;i <= n;++i){ intl,r; scanf( "%d%d",&l,&r); if(l <= L && R <= r){ ans++;}}printf( "%d\n",ans); return0;}

B

#include

charS[ 105]; intm; // 此刻 S 的长度是多少intn;

intmain{ scanf( "%d",&n); for( inti = 1;i <= n;++i){ charstr[ 23]; longlong l;scanf( "%s%lld",str,&l); charc = str[ 0]; if(m+l > 100){ puts( "Too Long"); return0;}while(l--) S[++m] = c; }for( inti = 1;i <= m;++i) putchar(S[i]); puts( "");

return0;}

C

#include

#defineLL long longusingnamespacestd;intA; LL N;

boolcheck(LL x){ // 检测 x 是否是 A 进制下的回文数vector< int> digits; while(x){ digits. push_back(x%A); x /= A;}intm = digits. size; for( inti = 0;i <= (m -1)/ 2;++i){ if(digits[i] != digits[m -1-i]) returnfalse; }returntrue;}

LL get_pali(intx,intodd){ // x 是前一半,是否要奇数长度vector< int> digits; while(x) digits. push_back(x% 10),x /= 10; longlong res = 0; intm = digits. size; for( inti = m -1;i >= 0;--i) res = res * 10+ digits[i]; for( inti = odd;i <= m -1;++i) res = res * 10+ digits[i]; returnres; }

intmain{ scanf( "%d%lld",&A,&N); // 偶数长度longlong ans = 0; for( intx = 1;;x++){ longlong pali = get_pali(x, 0); if(pali > N) break; if( check(pali)) ans += pali; }// 奇数长度for( intx = 1;;x++){ longlong pali = get_pali(x, 1); if(pali > N) break; if( check(pali)) ans += pali; }printf( "%lld\n",ans); return0;}

D

#include

#define LL long longusingnamespacestd;intn,m; constint MAXN = 5e5 + 5; LL x[MAXN];

intmain{scanf( "%d%d",&n,&m); for( inti = 1;i <= n;++i) scanf( "%lld", x+i); sort( x+ 1, x+n+ 1); vector vec; for( inti = 2;i <= n;++i) vec.push_back( x[i] - x[i- 1]); sort(vec.begin,vec.end); reverse(vec.begin,vec.end); LL ans = x[n]- x[ 1]; for( inti = 0;i < m- 1;++i){ ans -= vec[i]; }printf( "%lld\n",ans); return0; }

E

#include

intmain{LL n;scanf( "%lld",&n); intpart1 = 1ll*(n%mod)*((n+ 1)%mod)%mod*inv2%mod; intpart2 = 0; for(LL l = 1,r;l <= n;l = r+ 1){ //遍历了所有可能的值 // 相同的值只访问一次// [n/i] 只有不超过 2sqrt(n) 个 r = n / (n / l);intlen = (r-l+ 1)%mod; intval = (n/l)%mod; (part2 += 1ll*len * val % mod) %= mod; }intans = (part1 - part2 + mod) % mod; printf( "%d\n",ans); return0; }

F

#includeusingnamespacestd;constint MAXN = 2e5+ 5; constint MAXK = 20+ 5;

structEdge{intto,nxt; }e[MAXN<< 1]; inthead[MAXN], cnt; intn,K;

voidadd( intu, intv){ e[++cnt] = (Edge){v,head[u]};head[u] = cnt;e[++cnt] = (Edge){u,head[v]};head[v] = cnt;}

intf[MAXN<< 1][MAXK],ans[MAXN]; intvis[MAXN][MAXK]; // f[i][j]: 上一步走的是第i条边(u->v),走完了第j步

inlinevoidSolve{ scanf( "%d%d",&n,&K); for( inti = 1;i <= n;++i){ head[i] = 0; ans[i] = 1e9; for( intj = 0;j <= K;++j) vis[i][j] = 0; }cnt = 1; for( inti = 1;i < n;++i){ intu,v; scanf( "%d%d",&u,&v); add(u,v); }for( inti = 1;i <= cnt;++i){ for( intj = 0;j <= K;++j) f[i][j] = -1; }

queueint, int> > q; for( inti = head[ 1];i;i=e[i].nxt){ f[i][ 1] = 1; q. push({i, 1}); }while(!q. empty){ auto[id, k] = q. front;q. pop; intv = e[id].to, u = e[id^ 1].to; if(k == K) ans[v] = min(ans[v], f[id][k] / K); if(vis[v][k] == 2) continue; ++vis[v][k];for( inti = head[v];i;i = e[i].nxt){ if(k < K && e[i].to == u) continue; intnxt_k = k == K ? 1: k+ 1; if(f[i][nxt_k] == -1){ f[i][nxt_k] = f[id][k] + 1; q. push({i, nxt_k}); }}}for( inti = 2;i <= n;++i) printf( "%d%c",ans[i]== 1e9? -1:ans[i], " \n"[i==n]); }

intmain{ intT; scanf( "%d",&T); while(T--) Solve; return0;}

G

#includeusingnamespacestd;

#defineLL long longconstint MAXN = 6e5+ 5;

intlc[MAXN], rc[MAXN]; inttot; // 1~n: 叶子编号vectorint,LL> > G[MAXN];

voidadd( intu, intv,LL w){ G[u]. push_back({v, w}); }LL p[MAXN];// s: 上车 t: 下车// l: 靠左 r: 靠右intrt_sl, rt_sr, rt_tl, rt_tr;

voidbuild( int&x, intl, intr, intup, intleft){ // up=1: 子 -> 父// up=0: 父 -> 子// left=1: 靠左// left=0: 靠右if(l == r){ x = l; // 所有线段树的叶子节点共享return; }if(!x) x = ++tot; intmid = (l + r) >> 1; build(lc[x], l, mid, up, left); build(rc[x], mid+ 1, r, up, left); if(left){ if(up){ add(lc[x], x, 0); add(rc[x], x, p[mid+ 1]-p[l]); }else{ add(x, lc[x], 0); add(x, rc[x], p[mid+ 1]-p[l]); }}else{ if(up){ add(lc[x], x, p[r]-p[mid]); add(rc[x], x, 0); }else{ add(x, lc[x], p[r]-p[mid]); add(x, rc[x], 0); }}}

structNode{intl,r,x; };

voidgetseg( intx, intl, intr, intL, intR,vector &res){ if(l == L && r == R){ res. push_back({l,r,x}); return; }intmid = (l + r) >> 1; if(R <= mid) getseg(lc[x],l,mid,L,R,res); elseif(L > mid) getseg(rc[x],mid+ 1,r,L,R,res); elsegetseg(lc[x],l,mid,L,mid,res), getseg(rc[x],mid+ 1,r,mid+ 1,R,res); }

LL dis[MAXN];boolused[MAXN];

voiddij{ for( inti = 1;i <= tot;++i) dis[i] = 1e18; priority_queueint>, vectorint> >, greaterint> > > pq; dis[ 1] = 0;pq. push({ 0, 1}); while(!pq. empty){ autov = pq. top.second;pq. pop; if(used[v]) continue; used[v] = 1; for( auto[x,w]:G[v]){ if(dis[x] > dis[v]+w){ dis[x] = dis[v] + w;pq. push({dis[x], x}); }}}}

intn,m;

intmain{ scanf( "%d%d",&n,&m); for( inti = 1;i <= n;++i) scanf( "%lld", &p[i]); tot = n;build(rt_sr, 1, n, 1, 0); build(rt_sl, 1, n, 1, 1); build(rt_tr, 1, n, 0, 0); build(rt_tl, 1, n, 0, 1);

for( inti = 1;i <= m;++i){ intl,r,L,R;LL c; scanf( "%d%d%d%d%lld",&l,&r,&L,&R,&c); vector segs, segt;if(r < L){ getseg(rt_sr, 1, n, l, r, segs); getseg(rt_tl, 1, n, L, R, segt); ++tot;for( auto[ll,rr,x]:segs){ add(x, tot, p[L]-p[rr]); }for( auto[ll,rr,x]:segt){ add(tot, x, c + p[ll]-p[L]); }}else{ getseg(rt_sl, 1, n, l, r, segs); getseg(rt_tr, 1, n, L, R, segt); ++tot;for( auto[ll,rr,x]:segs){ add(x, tot, p[ll]-p[R]); }for( auto[ll,rr,x]:segt){ add(tot, x, c + p[R]-p[rr]); }}}dij; for( inti = 2;i <= n;++i) printf( "%lld%c", dis[i] == 1e18? -1: dis[i], " \n"[i == n]); return0;}

题库地址:https://atcoder.jp

针对每周六20:00举办的ABC比赛,我们每周日都会对比赛直播。

相关内容

最新资讯

同比增2.2倍,比亚迪出口狂飙... 6月份整车出口排名出炉,比亚迪出口量达到9万台,同比增长2.2倍,和第一名的奇瑞仅相差1.6万台。不...
哪些公司智驾水平领先?四维图新... 当华为ADS 3.0以99%泊车成功率刷新行业标准,百度萝卜快跑凭纯视觉方案实现全球首个Robota...
猛士M817预售,实力会让硬派... 7月份新车里比较热门的一个是猛士M817开启预售了,2个版本,Pro版预售价32.99万元,Max版...
安卓系统开心消消乐,畅享无尽欢... 你有没有发现,手机里那个小小的开心消消乐,竟然能让你在忙碌的生活中找到一丝丝的乐趣呢?安卓系统上的这...
原生安卓系统不能联网,无需联网... 你有没有遇到过这种情况?手机里装了个原生安卓系统,结果连不上网,急得像热锅上的蚂蚁。别急,今天就来给...
安卓系统怎么屏蔽app,安卓系... 你是不是也和我一样,手机里装了太多APP,有时候不小心就点到那些不想要的软件了?别急,今天就来教你怎...
pos机刷安卓系统,创新支付体... 你有没有想过,那些在街头巷尾摆摊的小贩,还有那些忙碌的商家,他们是如何轻松地处理各种支付方式的呢?没...
还在用安卓4.3系统,体验经典... 你还在用安卓4.3系统吗?别告诉我你还在用那款老旧的手机,仿佛穿越回了那个手机功能单一、应用匮乏的年...
安卓怎么降低系统等级,体验纯净... 亲爱的安卓用户们,你是否曾因为系统等级过高而感到烦恼?是不是觉得手机运行越来越卡,游戏加载速度慢得让...
安卓系统蓝牙配对密码,轻松实现... 你有没有遇到过这种情况:手机里堆满了各种蓝牙设备,每次配对都要输入那串神秘的密码,真是让人头疼不已。...