CS Academy Round #43 A B C D
来源:互联网 发布:在线录像软件 编辑:程序博客网 时间:2024/05/18 03:55
A
题意:
丢两个骰子最高概率得到的和
#include <iostream>#include <algorithm>#include <sstream>#include <string>#include <queue>#include <cstdio>#include <map>#include <set>#include <utility>#include <stack>#include <cstring>#include <cmath>#include <vector>#include <ctime>#include <bitset>using namespace std;#define pb push_back#define sd(n) scanf("%d",&n)#define sdd(n,m) scanf("%d%d",&n,&m)#define sddd(n,m,k) scanf("%d%d%d",&n,&m,&k)#define sld(n) scanf("%lld",&n)#define sldd(n,m) scanf("%lld%lld",&n,&m)#define slddd(n,m,k) scanf("%lld%lld%lld",&n,&m,&k)#define sf(n) scanf("%lf",&n)#define sff(n,m) scanf("%lf%lf",&n,&m)#define sfff(n,m,k) scanf("%lf%lf%lf",&n,&m,&k)#define ss(str) scanf("%s",str)#define ans() printf("%d",ans)#define ansn() printf("%d\n",ans)#define anss() printf("%d ",ans)#define lans() printf("%lld",ans)#define lanss() printf("%lld ",ans)#define lansn() printf("%lld\n",ans)#define fansn() printf("%.5f\n",ans)#define r0(i,n) for(int i=0;i<(n);++i)#define r1(i,e) for(int i=1;i<=e;++i)#define rn(i,e) for(int i=e;i>=1;--i)#define rsz(i,v) for(int i=0;i<(int)v.size();++i)#define szz(x) ((int)x.size())#define mst(abc,bca) memset(abc,bca,sizeof abc)#define lowbit(a) (a&(-a))#define all(a) a.begin(),a.end()#define pii pair<int,int>#define pli pair<ll,int>#define mp make_pair#define lrt rt<<1#define rrt rt<<1|1#define X first#define Y second#define PI (acos(-1.0))#define sqr(a) ((a)*(a))typedef long long ll;typedef unsigned long long ull;const int mod = 1000000000+7;const double eps=1e-9;const int inf=0x3f3f3f3f;const ll infl = 10000000000000000;const int maxn= 500+10;const int maxm = 10000+10;int a[10],b[10];int cnt[200];int main(){#ifdef LOCAL freopen("input.txt","r",stdin);// freopen("output.txt","w",stdout);#endif // LOCAL r1(i,6)sd(a[i]); r1(i,6)sd(b[i]); for(int i=1;i<=6;++i) { for(int j=1;j<=6;++j) { int c = a[i]+b[j]; cnt[c]++; } } int mx = 0,ans = 0; for(int i=1;i<=100;++i) { if(cnt[i]>mx)ans = i,mx = cnt[i]; } ansn(); return 0;}
B
题意:
画水平和垂直分割线把矩形分成很多个小矩形
算里面有多少个正方形
#include <iostream>#include <algorithm>#include <sstream>#include <string>#include <queue>#include <cstdio>#include <map>#include <set>#include <utility>#include <stack>#include <cstring>#include <cmath>#include <vector>#include <ctime>#include <bitset>using namespace std;#define pb push_back#define sd(n) scanf("%d",&n)#define sdd(n,m) scanf("%d%d",&n,&m)#define sddd(n,m,k) scanf("%d%d%d",&n,&m,&k)#define sld(n) scanf("%lld",&n)#define sldd(n,m) scanf("%lld%lld",&n,&m)#define slddd(n,m,k) scanf("%lld%lld%lld",&n,&m,&k)#define sf(n) scanf("%lf",&n)#define sff(n,m) scanf("%lf%lf",&n,&m)#define sfff(n,m,k) scanf("%lf%lf%lf",&n,&m,&k)#define ss(str) scanf("%s",str)#define ans() printf("%d",ans)#define ansn() printf("%d\n",ans)#define anss() printf("%d ",ans)#define lans() printf("%lld",ans)#define lanss() printf("%lld ",ans)#define lansn() printf("%lld\n",ans)#define fansn() printf("%.5f\n",ans)#define r0(i,n) for(int i=0;i<(n);++i)#define r1(i,e) for(int i=1;i<=e;++i)#define rn(i,e) for(int i=e;i>=1;--i)#define rsz(i,v) for(int i=0;i<(int)v.size();++i)#define szz(x) ((int)x.size())#define mst(abc,bca) memset(abc,bca,sizeof abc)#define lowbit(a) (a&(-a))#define all(a) a.begin(),a.end()#define pii pair<int,int>#define pli pair<ll,int>#define mp make_pair#define lrt rt<<1#define rrt rt<<1|1#define X first#define Y second#define PI (acos(-1.0))#define sqr(a) ((a)*(a))typedef long long ll;typedef unsigned long long ull;const int mod = 1000000000+7;const double eps=1e-9;const int inf=0x3f3f3f3f;const ll infl = 10000000000000000;const int maxn= 100000+10;const int maxm = 10000+10;int y[maxn];int x[maxn];int cnt[maxn];int main(){#ifdef LOCAL freopen("input.txt","r",stdin);// freopen("output.txt","w",stdout);#endif // LOCAL int h,w,n,m; sdd(h,w); sdd(n,m); r1(i,n)sd(y[i]); r1(i,m)sd(x[i]); sort(y+1,y+1+n); sort(x+1,x+1+m); for(int i=1;i<=n;++i) { int tmp = y[i]-y[i-1]; cnt[ tmp]++; } cnt[ h-y[n] ]++; ll ans = 0; r1(i,m) { int tmp = x[i]-x[i-1]; if(tmp==0)continue; ans+=cnt[tmp]; } if(x[m]!=w) ans+=cnt[ w-x[m] ]; lansn(); return 0;}
C
题意:
火车长为L 在x坐标上0和D有加油站
另外在[0,D]有n个加油站
只要火车的线段跟点有交点就不用移动
否则就需要往前或者往后推
问火车在[0,D]上要加油需要推动的距离的期望
做法:
相交的时候肯定是不用推的 那么只要考虑不想交的状态
对于一段需要移动的位置求一个需要推动的距离的连续概率
对于一段无法跟加油站相交的位置需要推动的距离如图
直接求面积
#include <iostream>#include <algorithm>#include <sstream>#include <string>#include <queue>#include <cstdio>#include <map>#include <set>#include <utility>#include <stack>#include <cstring>#include <cmath>#include <vector>#include <ctime>#include <bitset>using namespace std;#define pb push_back#define sd(n) scanf("%d",&n)#define sdd(n,m) scanf("%d%d",&n,&m)#define sddd(n,m,k) scanf("%d%d%d",&n,&m,&k)#define sld(n) scanf("%lld",&n)#define sldd(n,m) scanf("%lld%lld",&n,&m)#define slddd(n,m,k) scanf("%lld%lld%lld",&n,&m,&k)#define sf(n) scanf("%lf",&n)#define sff(n,m) scanf("%lf%lf",&n,&m)#define sfff(n,m,k) scanf("%lf%lf%lf",&n,&m,&k)#define ss(str) scanf("%s",str)#define ans() printf("%d",ans)#define ansn() printf("%d\n",ans)#define anss() printf("%d ",ans)#define lans() printf("%lld",ans)#define lanss() printf("%lld ",ans)#define lansn() printf("%lld\n",ans)#define fansn() printf("%.10f\n",ans)#define r0(i,n) for(int i=0;i<(n);++i)#define r1(i,e) for(int i=1;i<=e;++i)#define rn(i,e) for(int i=e;i>=1;--i)#define rsz(i,v) for(int i=0;i<(int)v.size();++i)#define szz(x) ((int)x.size())#define mst(abc,bca) memset(abc,bca,sizeof abc)#define lowbit(a) (a&(-a))#define all(a) a.begin(),a.end()#define pii pair<int,int>#define pli pair<ll,int>#define mp make_pair#define lrt rt<<1#define rrt rt<<1|1#define X first#define Y second#define PI (acos(-1.0))#define sqr(a) ((a)*(a))typedef long long ll;typedef unsigned long long ull;const int mod = 1000000000+7;const double eps=1e-8;const int inf=0x3f3f3f3f;const ll infl = 10000000000000000;const int maxn= 100000+10;const int maxm = 10000+10;int a[maxn];int main(){#ifdef LOCAL freopen("input.txt","r",stdin);// freopen("output.txt","w",stdout);#endif // LOCAL int d,l,n; sddd(d,l,n); r1(i,n)sd(a[i]); a[n+1] = d; sort(a+1,a+1+n); ll sum=0; n++; r1(i,n) { int check = a[i]-a[i-1]; if(check>l) { sum+=1LL*(check-l)*(check-l); } } double ans = 0.25*sum /d; fansn(); return 0;}
D
题意:给一个图求A-C,B-C,A-B相等并且距离最小时候的ABC
做法:
先考虑有没有一个长度为3的环 有则长度都为1
否则一定是长度至少为2
如果有度为3的点那一定存在长度为2的合法情况
如果不存在则图只有链或者环
判断是否是环并且长度为3的倍数 这样才能三个到各2个的距离相等
#include <iostream>#include <algorithm>#include <sstream>#include <string>#include <queue>#include <cstdio>#include <map>#include <set>#include <utility>#include <stack>#include <cstring>#include <cmath>#include <vector>#include <ctime>#include <bitset>using namespace std;#define pb push_back#define sd(n) scanf("%d",&n)#define sdd(n,m) scanf("%d%d",&n,&m)#define sddd(n,m,k) scanf("%d%d%d",&n,&m,&k)#define sld(n) scanf("%lld",&n)#define sldd(n,m) scanf("%lld%lld",&n,&m)#define slddd(n,m,k) scanf("%lld%lld%lld",&n,&m,&k)#define sf(n) scanf("%lf",&n)#define sff(n,m) scanf("%lf%lf",&n,&m)#define sfff(n,m,k) scanf("%lf%lf%lf",&n,&m,&k)#define ss(str) scanf("%s",str)#define ans() printf("%d",ans)#define ansn() printf("%d\n",ans)#define anss() printf("%d ",ans)#define lans() printf("%lld",ans)#define lanss() printf("%lld ",ans)#define lansn() printf("%lld\n",ans)#define fansn() printf("%.5f\n",ans)#define r0(i,n) for(int i=0;i<(n);++i)#define r1(i,e) for(int i=1;i<=e;++i)#define rn(i,e) for(int i=e;i>=1;--i)#define rsz(i,v) for(int i=0;i<(int)v.size();++i)#define szz(x) ((int)x.size())#define mst(abc,bca) memset(abc,bca,sizeof abc)#define lowbit(a) (a&(-a))#define all(a) a.begin(),a.end()#define pii pair<int,int>#define pli pair<ll,int>#define mp make_pair#define lrt rt<<1#define rrt rt<<1|1#define X first#define Y second#define PI (acos(-1.0))#define sqr(a) ((a)*(a))typedef long long ll;typedef unsigned long long ull;const int mod = 1000000000+7;const double eps=1e-9;const int inf=0x3f3f3f3f;const ll infl = 10000000000000000;const int maxn= 100000+10;const int maxm = 10000+10;int n,m;vector<int>G[maxn];int deg[maxn];bool vis[maxn];int fa[maxn];int d[maxn];int faf(int x){ return fa[x]==x?x:fa[x] = faf(fa[x]);}void un(int a,int b){ int f1 = faf(a),f2 = faf(b); if(f1!=f2)fa[f2]=f1,d[f1] +=d[f2];}int rot[maxn];int cir[maxn];int cnt;void dfs(int u,int f){ vis[u]=1; rot[++cnt] = u; rsz(i,G[u]) { int v = G[u][i]; if(v==f)continue; if(!vis[v]) { dfs(v,u); } }}int main(){#ifdef LOCAL freopen("input.txt","r",stdin);// freopen("output.txt","w",stdout);#endif // LOCAL sdd(n,m); r1(i,n)fa[i] = i,d[i]=1; while(m--) { int u,v; sdd(u,v); G[u].pb(v),G[v].pb(u); deg[u]++,deg[v]++; un(u,v); } int ans = inf , idx = 0; for(int i=1;i<=n;++i) { int fat = faf(i); if(deg[i]==2)cir[fat]++; } for(int i=1;i<=n;++i) { if(d[i]%3==0&&faf(i)==i&&cir[i]==d[i]) { if(ans>d[i]) { ans = d[i]; idx = i; } } } dfs(idx,0); int a = ans/3; if(!idx||ans>6) for(int i=1;i<=n;++i) { if(deg[i]>=3) { for(int j=0;j<3;++j) printf("%d%c",G[i][j]," \n"[j==2]); return 0; } } if(idx)printf("%d %d %d\n",rot[a],rot[2*a],rot[3*a]); if(!idx)return 0*puts("-1"); return 0;}
阅读全文
0 0
- CS Academy Round #43 A B C D
- CS Academy Round #44 A B C D
- CS Academy Round #49 A, B, C
- CS Academy Round #50 D.Min Races
- CS Academy Round #49 C.Max Substring
- CS Academy Round #49 C.Max Substring 【后缀数组】
- Codeforces Round #351 A B C D
- Codeforces Round #377 A.B.C.D
- CS Academy Round #32 Light Count
- CS Academy Round #33 Subinterval Division
- Codeforces Round #179 (Div. 2)A、B、C、D
- Codeforces Round #186 (Div. 2)A、B、C、D、E
- Codeforces Round #198 (Div. 1)(A,B,C,D)
- Codeforces Round #202 (Div. 2) (A、B、C、D)
- Codeforces Round #211 (Div. 2)(A,B,C,D)
- Codeforces Round #220 (Div. 2)(A,B,C,D)
- Codeforces Round#229 DIV2 A,B,C,D
- Codeforces Round #231 (Div. 2)A, B, C, D
- JSTree 自定义图标 不同节点 显示不同图标
- 堆排序(JAVA)
- 面向开发者的 Android 8.0 Oreo 详细介绍
- 1023. 组个最小数 (20)
- Reactor模型
- CS Academy Round #43 A B C D
- Java8 String的底层实现
- brew通常使用
- HDU 4725 The Shortest Path in Nya Graph (最短路径、建图,好题)
- 在离线的移动硬盘中查找文件
- 间隔删数
- 【LintCode】旋转字符串
- JSTree 默认展开 树节点默认展开
- Java EE是 J2EE的一个新的名称,之所以改名,目的还是让大家清楚J2EE只是Java企业应用.随着WEB和EJB容器概念诞生,使得软件应用业开始担心SUN的伙伴们是否还在Java平台上不断推出