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;
}