评论

AtCoder | ABC374比赛题解直播预告

关注我哟定期推送帐号信息学新闻竞赛自主招生信息学专业知识信息学疑难解答信息学训练营信息等诸多优质内容的微信平台, 欢迎分享文章给你的朋友或者朋友圈! 有任何问题请联系小编!

AtCoder (ABC 373)比赛于上周六晚(20:00)进行,今天为大家带来本次比赛的视频讲解,文字版题目解析及参考代码。

AtCoder (ABC 374)比赛将于本周六(10月5日)晚20:00进行,同学们参与比赛后可在本周日(10月6日)晚 19:00进入继续到直播间观看题目解析

本周日比赛讲解老师:清华大学 吴老师(NOI2021银牌)

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

ABC373 比赛真题讲解

题目列表:

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

ABC373题解(文字版)

►A代码

参考代码

# include<bits/stdc++.h> usingnamespacestd;

intmain{ intans = 0; for( inti = 1;i <= 12;++i){ charstr[ 233]; scanf( "%s",str); if( strlen(str) == i) ++ans; }printf( "%d\n",ans); return0; }

B代码

# include<bits/stdc++.h>

charstr[ 30]; intpos[ 26];

intmain{ scanf( "%s",str); for( inti = 0;i < 26;++i){ // str[i] 是第 str[i]-'A' 个字母(从0开始编号)pos[str[i]- 'A'] = i; }intans = 0; for( inti = 1;i < 26;++i){ ans += std:: abs(pos[i]-pos[i -1]); }printf( "%d\n",ans); return0; }

C代码

# include<bits/stdc++.h>

constintMAXN = 5e5+ 5; intn,a[MAXN],b[MAXN];

intmain{ scanf( "%d",&n); for( inti = 1;i <= n;++i) scanf( "%d",a+i); for( inti = 1;i <= n;++i) scanf( "%d",b+i); printf( "%d\n",* std::max_element(a+ 1,a+n+ 1) + * std::max_element(b+ 1,b+n+ 1)); return0; }

D代码

# include<bits/stdc++.h>

constintMAXN = 2e5+ 5; intn,q; intx[MAXN]; longlongp[MAXN];

intmain{ scanf( "%d",&n); for( inti = 1;i <= n;++i) scanf( "%d",x+i); for( inti = 1;i <= n;++i) scanf( "%lld",p+i),p[i] += p[i -1]; scanf( "%d",&q); while(q--){ intL,R; scanf( "%d%d",&L,&R); // x : 指向 x

E代码

# include<bits/stdc++.h>

# definefi first # definese second # defineDB double # defineU unsigned # defineP std::pair # defineLL long long # defineLD long double # definepb emplace_back # definepf emplace_front # defineMP std::make_pair # defineSZ(x) ((int)x.size) # defineall(x) x.begin,x.end # defineCLR(i,a) memset(i,a,sizeof(i)) # defineFOR(i,a,b) for(int i = a;i <= b;++i) # defineROF(i,a,b) for(int i = a;i >= b;--i) # defineDEBUG(x) std::cerr << #x << '='<< x << std::endl

constintMAXN = 2e5+ 5; intn,M;LL k; LL a[MAXN],b[MAXN];LL sm[MAXN];

boolcheck(LL o, LL d){ // o 加上 d// 找到 >o+d 的数字intp = std::upper_bound(b+ 1,b+n+ 1,o+d)-b; intupper = n-p+ 1; if(upper >= M) return0; // upper < M, // [p-(M-upper),p-1] M-upper 个LL S = (sm[p-(M-upper)]-sm[p]);if(b[p-(M-upper)] <= o && o <= b[p -1]){ S -= o;S += b[p-(M-upper) -1]; }return(o+d+ 1)*(M-upper) - S > k-d; }

intmain{ scanf( "%d%d%lld",&n,&M,&k); if(M == n){ FOR(i, 1,n) printf( "0 "); puts( ""); return0; }FOR(i, 1,n) scanf( "%lld",a+i),b[i] = a[i], k -= a[i]; std::sort(b+ 1,b+n+ 1);ROF(i,n, 1) sm[i] = sm[i+ 1] + b[i]; FOR(i, 1,n){ LL l = 0,r = k,ans = -1; while(l <= r){ LL mid = (l + r) >> 1; if(check(a[i], mid)) ans = mid, r = mid -1; elsel = mid + 1; }printf( "%lld%c",ans, " \n"[i==n]); }return0; }

F代码

# include<bits/stdc++.h>

# definefi first # definese second # defineDB double # defineU unsigned # defineP std::pair # defineLL long long # defineLD long double # definepb emplace_back # definepf emplace_front # defineMP std::make_pair # defineSZ(x) ((int)x.size) # defineall(x) x.begin,x.end # defineCLR(i,a) memset(i,a,sizeof(i)) # defineFOR(i,a,b) for(int i = a;i <= b;++i) # defineROF(i,a,b) for(int i = a;i >= b;--i) # defineDEBUG(x) std::cerr << #x << '='<< x << std::endl

constintMAXN = 3000+ 5; intn,W; LL f[MAXN];std:: vector< int> vec[MAXN]; LL cost[MAXN];

intmain{ scanf( "%d%d",&n,&W); FOR(i, 1,n){ intw,v; scanf( "%d%d",&w,&v); vec[w].pb(v -1); }FOR(i, 0,MAXN -1) f[i] = -1e18;f[ 0] = 0; FOR(w, 1,W){ if(vec[w].empty) continue; std::priority_queue< int> que; for( autox:vec[w]) que.push(x); cost[ 0] = 0; FOR(k, 1,W/w){ intv = que.top;que.pop; cost[k] = cost[k -1] + v; v -= 2;que.push(v); }ROF(j,W, 0){ FOR(k, 0,j/w){ f[j] = std::max(f[j], 1ll*f[j-k*w] + cost[k]); }}}LL ans = -1e18;FOR(i, 0,W) ans = std::max(ans, f[i]); printf( "%lld\n",ans); return0; }

G代码

# include<bits/stdc++.h># include"atcoder/mincostflow"

# definefi first # definese second # defineDB double # defineU unsigned # defineP std::pair # defineLL long long # defineLD long double # definepb emplace_back # definepf emplace_front # defineMP std::make_pair # defineSZ(x) ((int)x.size) # defineall(x) x.begin,x.end # defineCLR(i,a) memset(i,a,sizeof(i)) # defineFOR(i,a,b) for(int i = a;i <= b;++i) # defineROF(i,a,b) for(int i = a;i >= b;--i) # defineDEBUG(x) std::cerr << #x << '='<< x << std::endl

constintMAXN = 300+ 5; intn; inta[MAXN],b[MAXN]; intc[MAXN],d[MAXN]; usingatcoder::mcf_graph; intans[MAXN];

longdoubledis2( intx, inty) { returnsqrtl( 1ll*(a[x]-c[y])*(a[x]-c[y])+ 1ll*(b[x]-d[y])*(b[x]-d[y])); }

intmain{ scanf( "%d",&n); FOR(i, 0,n -1) scanf( "%d%d",a+i,b+i); FOR(i, 0,n -1) scanf( "%d%d",c+i,d+i); mcf_graph<LL, longdouble> G( 2*n+ 2); intS = 2*n,T = 2*n+ 1; FOR(i, 0,n -1) G.add_edge(S, i, 1, 0); FOR(i, 0,n -1) G.add_edge(i+n, T, 1, 0); FOR(i, 0,n -1) FOR(j, 0,n -1){ G.add_edge(i, j+n, 1, dis2(i,j)); }autoresult = G.flow(S, T); autoedges = G.edges; for( autoe:edges){ if( 0<= e.from && e.from <= n -1&& n <= e.to && e.to <= 2*n -1&& e.flow == 1){ ans[e.from] = e.to-n;}}FOR(i, 0,n -1) printf( "%d ",ans[i]+ 1); return0; }

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

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

1返回搜狐,查看更多

责任编辑:

平台声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
阅读 ()