AtCoder Beginner Contest 214
2021/8/14 23:08:56
本文主要是介绍AtCoder Beginner Contest 214,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Link
A
直接做。
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #include<queue> #include<stack> #include<set> #include<map> #include<vector> #include<ctime> #include<cstdlib> using namespace std; #define mp make_pair #define pb push_back typedef pair<int,int> pii; typedef long long ll; typedef unsigned long long ull; inline int read() { int x=0,f=1;char c=getchar(); while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+(c^48);c=getchar();} return x*f; } int main() { int n=read(); if(n<=125)puts("4"); else if(n<=211)puts("6"); else puts("8"); }
B
直接做。
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #include<queue> #include<stack> #include<set> #include<map> #include<vector> #include<ctime> #include<cstdlib> using namespace std; #define mp make_pair #define pb push_back typedef pair<int,int> pii; typedef long long ll; typedef unsigned long long ull; inline int read() { int x=0,f=1;char c=getchar(); while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+(c^48);c=getchar();} return x*f; } int main() { int s=read(),t=read(),ans=0; for(int i=0;i<=s;i++) { for(int j=0;j<=s-i;j++) { for(int k=0;k<=s-i-j;k++) { if(i*j*k<=t)ans++; } } } printf("%d",ans); }
C
考虑从 \(T\) 最小的点转一圈,每个数的答案是前面的时间加上前面的 \(S\) 与 \(T\) 取 \(\min\)。
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #include<queue> #include<stack> #include<set> #include<map> #include<vector> #include<ctime> #include<cstdlib> using namespace std; #define int long long #define mp make_pair #define pb push_back typedef pair<int,int> pii; typedef long long ll; typedef unsigned long long ull; inline int read() { int x=0,f=1;char c=getchar(); while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+(c^48);c=getchar();} return x*f; } const int N=2e5+10; int s[N],t[N],ans[N]; signed main() { int n=read(); for(int i=1;i<=n;i++)s[i]=read(); for(int i=1;i<=n;i++)t[i]=read(); int x=-1,mn=0x7fffffff; for(int i=1;i<=n;i++)if(t[i]<mn)mn=t[i],x=i; ans[x]=mn; int sum=mn+s[x]; for(int i=1;i<n;i++) { int y=x+i;if(y>n)y-=n; ans[y]=sum=min(sum,t[y]); sum+=s[y]; } for(int i=1;i<=n;i++)printf("%lld\n",ans[i]); return 0; }
D
考虑每条边的贡献,是去掉这条边之后的两个连通块大小的乘积,但仍然不好处理。考虑倒过来,那么就是加边操作,并查集维护 size 即可。
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #include<queue> #include<stack> #include<set> #include<map> #include<vector> #include<ctime> #include<cstdlib> using namespace std; #define mp make_pair #define pb push_back typedef pair<int,int> pii; #define int long long typedef long long ll; typedef unsigned long long ull; inline int read() { int x=0,f=1;char c=getchar(); while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+(c^48);c=getchar();} return x*f; } const int N=1e5+10; int sz[N],f[N]; void init(int n){for(int i=1;i<=n;i++)f[i]=i,sz[i]=1;} int getf(int x){return f[x]==x?x:f[x]=getf(f[x]);} void merge(int x,int y) { int fx=getf(x),fy=getf(y); sz[fx]+=sz[fy]; f[fy]=fx; } struct Edge{int u,v,w;}e[N]; bool cmp(Edge a,Edge b){return a.w<b.w;} signed main() { int n=read(); for(int i=1;i<n;i++)e[i].u=read(),e[i].v=read(),e[i].w=read(); sort(e+1,e+n,cmp); init(n); int ans=0; for(int i=1;i<n;i++) { int x=e[i].u,y=e[i].v,w=e[i].w; int fx=getf(x),fy=getf(y); ans+=sz[fx]*sz[fy]*w; merge(x,y); } printf("%lld",ans); }
E
bool cmp(node x,node y) { if(x.r!=y.r)return x.r<y.r; else return x.l>y.l; }
这样 sort 之后每次取最左边的空闲点即可。
AC之后就跑路了所以并不会证明正确性
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #include<queue> #include<stack> #include<set> #include<map> #include<vector> #include<ctime> #include<cstdlib> using namespace std; #define mp make_pair #define pb push_back typedef pair<int,int> pii; typedef long long ll; typedef unsigned long long ull; inline int read() { int x=0,f=1;char c=getchar(); while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+(c^48);c=getchar();} return x*f; } const int N=2e5+10; struct node{int l,r;}a[N]; bool cmp(node x,node y) { // if(x.l!=y.l)return x.l<y.l; // else return x.r<y.r; if(x.r!=y.r)return x.r<y.r; else return x.l>y.l; } int tot=0; struct seg { int ls,rs,sum; seg(){ls=rs=sum=0;} }t[10000005]; void modify(int &p,int l,int r,int x) { if(!p)p=++tot; if(l==r) { t[p].sum=1; return; } int mid=(l+r)/2; if(x<=mid)modify(t[p].ls,l,mid,x); else modify(t[p].rs,mid+1,r,x); t[p].sum=t[t[p].ls].sum+t[t[p].rs].sum; } int query(int p,int l,int r,int ql,int qr) { if(p==0)return 0; if(ql<=l&&r<=qr)return t[p].sum; int mid=(l+r)/2,sum=0; if(ql<=mid)sum+=query(t[p].ls,l,mid,ql,qr); if(qr>mid)sum+=query(t[p].rs,mid+1,r,ql,qr); return sum; } void sol() { int n=read(); for(int i=1;i<=n;i++)a[i].l=read(),a[i].r=read(); sort(a+1,a+n+1,cmp); for(int i=1;i<=tot;i++)t[i].ls=t[i].rs=t[i].sum=0; tot=0; int rt=0; for(int i=1;i<=n;i++) { int l=a[i].l,r=a[i].r,pos=-1; while(l<=r) { int mid=(l+r)/2; if(query(rt,1,1000000000,l,mid)<mid-l+1)pos=mid,r=mid-1; else l=mid+1; } if(pos==-1)return puts("No"),void(); modify(rt,1,1000000000,pos); } puts("Yes"); } int main() { int T=read(); while(T--)sol(); return 0; }
F
咕咕咕
G
咕咕咕
H
咕咕咕
这篇关于AtCoder Beginner Contest 214的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享