Educational Codeforces Round 64(Unrated for Div.1+Div. 2)
什么垃圾比赛,A题说的什么鬼楞是没看懂。就我只会BD(其实C是个大水题二分),垃圾游戏,技不如人,肝败吓疯,告辞,口胡了E就睡觉了。
B
很容易发现,存在一种方案,使得相同字母连在一起,然后发现,当字母出现种类数大于等于4时,可以奇偶性相间地连接,然后讨论种类数<=3的:种类数为1,显然直接输出;种类数为2,若两字母相邻则无解,否则直接输出;种类数为3,若三字母相邻则无解,否则按照213/231(至少一种符合条件)输出。
#include<bits/stdc++.h>
using namespace std;
const int N=;
int T,n,m,ans,sum[N],id[N];
char s[N];
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%s",s+),n=strlen(s+);
memset(sum,,sizeof sum);
memset(id,,sizeof id);
for(int i=;i<=n;i++)sum[s[i]-'a'+]++;
int num=;
for(int i=;i<=;i++)if(sum[i])id[i]=++num;
if(num==)
{
for(int i=;i<=n;i++)printf("%c",s[i]);
}
else if(num>=)
{
for(int i=;i>=;i--)
if(id[i]&)
{
for(int j=;j<=sum[i];j++)printf("%c",'a'+i-);
}
for(int i=;i>=;i--)
if(id[i]&&id[i]%==)
{
for(int j=;j<=sum[i];j++)printf("%c",'a'+i-);
}
}
else if(num==)
{
int flag=;
for(int i=;i<=;i++)if(sum[i]&&sum[i-]&&sum[i+])flag=;
if(flag)printf("No answer");
else{
for(int i=;i<=;i++)
for(int j=;j<i;j++)
for(int k=i+;k<=;k++)
if(sum[j]&&sum[i]&&sum[k])
{
for(int t=;t<=sum[i];t++)printf("%c",'a'+i-);
if(j==i-)
{
for(int t=;t<=sum[k];t++)printf("%c",'a'+k-);
for(int t=;t<=sum[j];t++)printf("%c",'a'+j-);
}
else{
for(int t=;t<=sum[j];t++)printf("%c",'a'+j-);
for(int t=;t<=sum[k];t++)printf("%c",'a'+k-);
}
}
}
}
else{
int flag=;
for(int i=;i<=;i++)if(sum[i]&&sum[i+])flag=;
if(flag)printf("No answer");
else{
for(int i=;i<=;i++)if(sum[i])
{
for(int j=;j<=sum[i];j++)printf("%c",'a'+i-);
}
}
}
puts("");
}
}
D
很容易想到一个DP,令f[i]表示以i为根的子树,从下面的节点走上来,最后一步是黑边的点数,g[i]表示全走白边的点数,于是就有f[u]=Σ(f[son]+g[son]+1),son为经过黑边的son,g[u]=Σ(g[son]+1),son为经过白边的son。然后这个东西很容易换根DP,根据黑白边讨论一下即可。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+;
int n,cnt,f[N],g[N],nf[N],ng[N],hd[N],v[N<<],nxt[N<<],w[N<<];
ll ans;
void adde(int x,int y,int z){v[++cnt]=y,nxt[cnt]=hd[x],w[cnt]=z,hd[x]=cnt;}
void dfs(int u,int fa)
{
for(int i=hd[u];i;i=nxt[i])
if(v[i]!=fa)
{
dfs(v[i],u);
if(!w[i])g[u]+=g[v[i]]+;
else f[u]+=f[v[i]]+g[v[i]]+;
}
}
void dfs2(int u,int fa)
{
ans+=nf[u]+ng[u];
for(int i=hd[u];i;i=nxt[i])
if(v[i]!=fa)
{
if(!w[i])nf[v[i]]=f[v[i]],ng[v[i]]=ng[u];
else nf[v[i]]=nf[u]-g[v[i]]+ng[u],ng[v[i]]=g[v[i]];
dfs2(v[i],u);
}
}
int main()
{
scanf("%d",&n);
for(int i=,x,y,z;i<n;i++)scanf("%d%d%d",&x,&y,&z),adde(x,y,z),adde(y,x,z);
dfs(,);
nf[]=f[],ng[]=g[],dfs2(,);
cout<<ans;
}
E
口胡了一个分治做法,一写发现,它居然过了。感觉本题比D简单。
做法大致如下:直接算很难处理,考虑分治,对于长度大于等于3的区间[l,r],考虑覆盖mid和mid+1的所有区间,可以把[l,r]分为[l,mid]和[mid+1,r]两半,然后mx[i]对于左半部分表示后缀最大值,对于右半部分表示前缀最大值,然后枚举位置计算另一端的位置是否符合题意,因为区间的max值出现在两端的mx之一,所以左右都搜一下即可统计所有答案。复杂度O(nlogn)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+;
int n,ans,a[N],b[N],mx[N];
void solve(int l,int r)
{
if(l+>=r)return;
int mid=l+r>>;
solve(l,mid),solve(mid+,r);
mx[mid]=a[mid];for(int i=mid-;i>=l;i--)mx[i]=max(mx[i+],a[i]);
mx[mid+]=a[mid+];for(int i=mid+;i<=r;i++)mx[i]=max(mx[i-],a[i]);
for(int i=l;i<=mid;i++)
{
int pos=b[mx[i]-a[i]];
if(pos>mid&&pos<=r&&mx[pos]<mx[i])ans++;
}
for(int i=mid+;i<=r;i++)
{
int pos=b[mx[i]-a[i]];
if(pos>=l&&pos<=mid&&mx[pos]<mx[i])ans++;
}
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d",&a[i]),b[a[i]]=i;
solve(,n);
printf("%d",ans);
}
F
很容易想到dp,令f[i][j]表示第i轮当前卡为j且游戏继续的概率,然后根据第i轮每张卡有1/(n-i+1)的概率选中,直接写个前缀和,根据题意暴力DP转移即可,代码20行。
感觉这题更简单,CF这场什么垃圾排题顺序,难怪Unrated
#include<bits/stdc++.h>
using namespace std;
const int N=,mod=;
int n,ans,a[N],s[N],inv[N],f[N][N];
int main()
{
scanf("%d",&n);
for(int i=,x;i<=n;i++)scanf("%d",&x),a[x]++;
for(int i=n;i;i--)s[i]=s[i+]+a[i];
inv[]=;for(int i=;i<=n;i++)inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;
for(int i=;i<=n;i++)f[][i]=1ll*a[i]*inv[n]%mod;
for(int i=;i<=n;i++)
for(int j=,sum=;j<=n;j++)
f[i][j]=1ll*a[j]*sum%mod,sum=(sum+1ll*f[i-][j]*inv[n-i+])%mod;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if(a[j]>)ans=(ans+1ll*f[i][j]%mod*(a[j]-)%mod*inv[n-i])%mod;
printf("%d",ans);
}
G
看了下是个没有意思的大模拟,不想写也不会写,咕了。
感觉真实难度顺序:C<B<E<D=F<G<A
Educational Codeforces Round 64(Unrated for Div.1+Div. 2)的更多相关文章
- Educational Codeforces Round 64 (Rated for Div. 2)题解
Educational Codeforces Round 64 (Rated for Div. 2)题解 题目链接 A. Inscribed Figures 水题,但是坑了很多人.需要注意以下就是正方 ...
- Educational Codeforces Round 64部分题解
Educational Codeforces Round 64部分题解 A 题目大意:给定三角形(高等于低的等腰),正方形,圆,在满足其高,边长,半径最大(保证在上一个图形的内部)的前提下. 判断交点 ...
- Educational Codeforces Round 64 部分题解
Educational Codeforces Round 64 部分题解 不更了不更了 CF1156D 0-1-Tree 有一棵树,边权都是0或1.定义点对\(x,y(x\neq y)\)合法当且仅当 ...
- Educational Codeforces Round 64(ECR64)
Educational Codeforces Round 64 CodeForces 1156A 题意:1代表圆,2代表正三角形,3代表正方形.给一个只含1,2,3的数列a,ai+1内接在ai内,求总 ...
- Educational Codeforces Round 64 (Rated for Div. 2) A,B,C,D,E,F
比赛链接: https://codeforces.com/contest/1156 A. Inscribed Figures 题意: 给出$n(2\leq n\leq 100)$个数,只含有1,2,3 ...
- Educational Codeforces Round 64 (Rated for Div. 2) (线段树二分)
题目:http://codeforces.com/contest/1156/problem/E 题意:给你1-n n个数,然后求有多少个区间[l,r] 满足 a[l]+a[r]=max([l, ...
- Educational Codeforces Round 64 (Rated for Div. 2)D(并查集,图)
#include<bits/stdc++.h>using namespace std;int f[2][200007],s[2][200007];//并查集,相邻点int find_(in ...
- Educational Codeforces Round 64 (Div. 2)
A.3*3讨论即可,注意正方形套圆套三角形只有6个点. #include<cstdio> #include<cstring> #include<iostream> ...
- Educational Codeforces Round 64 -C(二分)
题目链接:https://codeforces.com/contest/1156/problem/C 题意:给出n个数和整形数z,定义一对数为差>=z的数,且每个数最多和一个数组成对,求最多有多 ...
随机推荐
- jQuery下拉框联动(JQ遍历&JQ中DOM操作)
1.下载jQuery,并导入:https://blog.csdn.net/weixin_44718300/article/details/88746796 2.代码实现: <!DOCTYPE h ...
- PAT 2019 春
算是第二次做这套题吧,感觉从上次考试到现在自己有了挺大提高,提前30min做完了. 7-1 Sexy Primes 读懂题意就行. #include <cstdio> #include & ...
- tensorflow中的神经网络笔记
1.NN----神经网络 2.CNN卷积神经网络 CNN网络一共有5个层级结构: 输入层 卷积层 激活层 池化层 全连接FC层 一.输入层 与传统神经网络/机器学习一样,模型需要输入的进行预处理操作, ...
- 读取cookie、写进cookie方法
整理 读取cookie.写进cookie方法. //设置cookies中的值 function setCookie(name, value) { var Days = 30; var exp = ne ...
- python全局变量、回调函数
1.python全局变量相关概念及使用 来自菜鸟教程上的例子: http://www.runoob.com/python3/python3-function.html 一.python入参需要注意地方 ...
- MySQL 插入 中文数据乱码解决
问题描述: 1.在命令行中进行插入,没有问题.但是显示存在部分乱码 2.在JDBC中插入成功.中文是直接以“??”形式显示. 通过Navicat客户端查看 与在网页中看到的一一致,说明读取没有问题,问 ...
- unable to execute /bin/mv: Argument list too long
四种解决”Argument list too long”参数列表过长的办法 转自 http://hi.baidu.com/cpuramdisk/item/5aa49ce00c0757aecf2d4f2 ...
- VMware CentOS 设置IP地址
VMware CentOS 设置IP地址 1. 设置虚拟机网络编辑器:参考:https://www.cnblogs.com/1285026182YUAN/p/10440443.html 2. Cent ...
- kali由wifi握手包破解密码&&gnuplot使用
1.kali密码破解(WiFi握手包) cap包密码破解,aircrack-ng wifi.cap -w psw.txt(你的字典文件) 2.画图工具gnuplot 1.txt中保存的是坐标,形式为: ...
- 【mui webAPP】HBuilder创建的iOS平台设置沉浸式状态栏
应用占用全屏区域,而系统状态栏需要预留出系统状态栏高度. HBuilder创建的应用默认不使用沉浸式状态栏样式,需要进行如下配置开启:打开应用的manifest.json文件,切换到代码视图,在plu ...