Codeforces Round #614 (Div. 2) A-E简要题解
链接:https://codeforces.com/contest/1293
A. ConneR and the A.R.C. Markland-N
题意:略
思路:上下枚举1000次扫一遍,比较一下上下最近的房间
AC代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<map>
#include<utility>
#include<string>
#include<vector>
#include<cstring>
#include<iostream>
#include<vector>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<queue>
#include<cstdio>
#include<unordered_map>
using namespace std;
const int maxn=1e5;
typedef long long ll; int main()
{
int t;
cin >> t;
while(t--)
{
map<int,int> v;
int n,s,k;
scanf("%d%d%d",&n,&s,&k);
int x;
for(int i=; i<=k; i++)
{ scanf("%d",&x);
v[x]++;
}
int l,r;
l=r=s;
if(!v[s])
cout << << endl;
else
{
while(v[l]&&v[r])
{
if(l->=)
l--;
if(r+<=n)
r++; }
if(!v[r]&&!v[l])
{
cout << min(s-l,r-s) << endl;
}
else if(!v[r]&&v[l])
{
cout << r-s<< endl;
}
else if(v[r]&&!v[l])
cout << s-l << endl;
}
}
return ;
}
B. JOE is on TV!
题意:略
思路:比较简单,推结论 max (n) = i/n+(i-1)/n + ...n/n
AC代码:
#include<iostream>
#include<vector>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<queue>
#include<cstdio>
#include<unordered_map>
using namespace std;
typedef long long ll;
int main(){
int t;
float ans = ;
scanf("%d",&t);
float i = ;
while(i<=t){
ans+=(/i);
i+=;
}
printf("%.12lf",ans);
return ;
}
C. NEKO's Maze Game
题意:有一个2×n的网格迷宫,网格可以翻动,由正常区域和堵塞区域切换,问从(1,1)能否到(2,n)
思路:一个网格如果翻动,如果这个网格是在第二列,那么这个网格可以和其左上角、正上方、右上角构成堵塞,这样算是三个“堵塞贡献”,如果位于第一列翻动由正常区域变成堵塞,那么这个网格可以和左下角、正下方、右下方的网格构成堵塞区域,这样也是三个贡献,每次放置网格就计算上这些贡献,换回正常的时候就减去,如果总的贡献是0,那么就可以到达(2,n)
AC代码:
#include<iostream>
#include<vector>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<queue>
#include<cstdio>
#include<unordered_map>
using namespace std;
typedef long long ll;
const int maxn = 1e5+;
int grid[][maxn];
int can[maxn];
int main(){
int n,q;
int cnt = ;
scanf("%d%d",&n,&q);
while(q--){
int x,y;
scanf("%d%d",&x,&y);
x = x - ;
if((grid[][y]+grid[][y]) == ){
cnt--;
}
if(grid[x][y]+grid[(x+)%][y-] == ){
cnt--;
}
if(grid[x][y]+grid[(x+)%][y+] == ){
cnt--;
}
grid[x][y] = (grid[x][y]+)%;
if((grid[][y]+grid[][y]) == ){
cnt++;
}
if(grid[x][y]+grid[(x+)%][y-] == ){
cnt++;
}
if(grid[x][y]+grid[(x+)%][y+] == ){
cnt++;
}
if(cnt == ){
printf("YES\n");
}
else printf("NO\n");
}
return ;
}
D. Aroma's Search
题意:二维平面上有若干个点,第i个点的坐标(xi,yi)满足xi=xi-1*ax+bx,yi=y-1*ay+by,已知 ax,bx,ay,by,x0,y0 以及初始位置(xs,ys),每秒钟可以往上下左右走1个单位,则在t秒内最多可以走到多少个点
思路:所有点之间的曼哈顿距离是乘指数级别增长的,不能到了一个点之后再回到初始点,也不能从距离最近的点开始出发去枚举。考虑到数据范围,其实点的极限数量大概在60多,所以可以构造一个暴力的算法去枚举。最佳的方案是先从起点到其中一个点,再从这个点向下面的点移动,因为向上比向下距离远,如果下方所有的点都可以到达,再往上走,这样是最佳的方案。所有需要枚举起点到每一个点,再从该点先向下方移动再向上移动
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll x0,y0,ax,ay,bx,by,xs,ys,t;
vector<pair<ll,ll> > v;
ll solve(int x){
ll remain = t;
remain -= abs(v[x].first-xs)+abs(v[x].second-ys);
if(remain<) return ;
ll res = ;
int last = x;
for(int i = x-;i>=;i--){
ll can = abs(v[i].first-v[last].first)+abs(v[i].second-v[last].second);//先向下方的点移动
if(remain-can<) break;
res++;
remain-=can;
last = i;
}
for(int i = x+;i<v.size();i++){
ll can = abs(v[i].first-v[last].first)+abs(v[i].second-v[last].second);//如果还有时间剩余向上方点移动
if(remain-can<) break;
res++;
remain-=can;
last = i;
}
return res;
}
int main(){
cin>>x0>>y0>>ax>>ay>>bx>>by;
cin>>xs>>ys>>t;
ll curx = x0,cury = y0;
while(){
ll disX = abs(curx-xs);
ll disY = abs(cury-ys);
if(curx>xs && cury>ys && disX+disY > t) break;//如果移动到该点就超过了t秒,break
v.push_back({curx,cury});
curx = ax*curx+bx;
cury = ay*cury+by;
}
ll ans = ;
for(int i = ;i<v.size();i++){
ans = max(ans,solve(i));//枚举到每个点
}
cout<<ans;
return ;
}
E. Xenon's Attack on the Gangs
题意:给出一颗树,树上随机分配边权值,不存在权值相同的两条边,定义mex(u,v)表示点u到点v经过边的边权集合S中没有出现的最小非负整数,求S = ∑mex(u,v) (1<=u<=v<=n)的最大值。
思路:这道题没有太明白,看官方题解首先要推出一个组合公式,问题转化为求一条边的贡献,对u到v的路径进行dp,枚举u到v的每一条路径的贡献。
放个官方题解吧
AC代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn = ;
typedef long long ll;
int fa[maxn][maxn],sub[maxn][maxn];
ll dp[maxn][maxn];
vector<int> G[maxn];
int n,root;
int dfs(int cur,int father){
sub[root][cur] = ;
for(int i = ;i<G[cur].size();i++){
if(G[cur][i]!=father){
fa[root][G[cur][i]] = cur;
sub[root][cur]+=dfs(G[cur][i],cur);
}
}
return sub[root][cur];
}
ll getDp(int u,int v){
if(u == v) return ;
if(dp[u][v] ) return dp[u][v];
return dp[u][v] = sub[u][v]*sub[v][u] + max(getDp(fa[v][u],v),getDp(fa[u][v],u));
}
int main(){
scanf("%d",&n);
for(int i = ;i<n;i++) {
int u,v;
cin>>u>>v;
G[u].push_back(v),G[v].push_back(u);
}
for(int i = ;i<=n;i++){
root = i;
dfs(i,-);
}
ll res = ;
for(int i = ;i<=n;i++){
for(int j = ;j<=n;j++){
res = max(res,getDp(i,j));
}
}
printf("%lld",res);
return ;
}
Codeforces Round #614 (Div. 2) A-E简要题解的更多相关文章
- Codeforces Round #609 (Div. 2)前五题题解
Codeforces Round #609 (Div. 2)前五题题解 补题补题…… C题写挂了好几个次,最后一题看了好久题解才懂……我太迟钝了…… 然后因为longlong调了半个小时…… A.Eq ...
- Codeforces Round #614 (Div. 2) C - NEKO's Maze Game
题目链接:http://codeforces.com/contest/1293/problem/C 题目:给定一个 2*n的地图,初始地图没有岩浆,都可以走, 给定q个询问,每个询问给定一个点(x,y ...
- Codeforces Round #614 (Div. 2) D
变色失败 只加8分 距离变色只差5分 B题没想到那么简单,结论秒猜,不敢交,傻傻验证5分钟. C题也想了码了好一会儿,我动态维护set做的. 1小时3题,整体难度好像没以前那么大了?(虽然也不强,但比 ...
- Codeforces Round #614 (Div. 2)E(思维,构造,DP)
构造边权,从0开始给边赋值,初始选取一条边权为0,每次赋值的贡献为这一条链两侧的结点(包含链的端点)个数之积,下一次赋值以当前链其一端点续一条边,边权为上次赋的值+1.先DFS找到点的组合这条链两侧结 ...
- Codeforces Round #614 (Div. 1) A. NEKO's Maze Game (思维,模拟)
题意:有一个\(2\)X\(n\)的矩阵,你想从\((1,1)\)走到\((2,n)\),每次可以向上下左右四个方向走,但在某些时间段某个点会被堵住,如果已经被堵住,那么即恢复正常,每次对某个点操作, ...
- Codeforces Round #556 (Div. 2) D. Three Religions 题解 动态规划
题目链接:http://codeforces.com/contest/1150/problem/D 题目大意: 你有一个参考串 s 和三个装载字符串的容器 vec[0..2] ,然后还有 q 次操作, ...
- Codeforces Round #604 (Div. 2) E. Beautiful Mirrors 题解 组合数学
题目链接:https://codeforces.com/contest/1265/problem/E 题目大意: 有 \(n\) 个步骤,第 \(i\) 个步骤成功的概率是 \(P_i\) ,每一步只 ...
- Codeforces Round #624 (Div. 3) F. Moving Points 题解
第一次写博客 ,请多指教! 翻了翻前面的题解发现都是用树状数组来做,这里更新一个 线段树+离散化的做法: 其实这道题是没有必要用线段树的,树状数组就能够解决.但是个人感觉把线段树用熟了会比树状数组更有 ...
- Codeforces Round #677 (Div. 3) E、G题解
E. Two Round Dances #圆排列 题目链接 题意 \(n\)(保证偶数)个人,要表演一个节目,这个节目包含两种圆形舞蹈,而每种圆形舞蹈恰好需要\(n/2\)个人,每个人只能跳一种圆形舞 ...
随机推荐
- 【新人赛】阿里云恶意程序检测 -- 实践记录10.13 - Google Colab连接 / 数据简单查看 / 模型训练
1. 比赛介绍 比赛地址:阿里云恶意程序检测新人赛 这个比赛和已结束的第三届阿里云安全算法挑战赛赛题类似,是一个开放的长期赛. 2. 前期准备 因为训练数据量比较大,本地CPU跑不起来,所以决定用Go ...
- Redis初级安装及使用
env:ubuntu 19.04 redis官网: redis.io 安装步骤: 1.wget http://download.redis.io/releases/redis-5.0.7.tar.gz ...
- JAVA是否最适合企业应用开发?
· JAVA是否最适合企业应用开发? 当我刚入行做程序员的时候,那是在01-02年,铺天盖地的都是java,j2ee,公司也使用java作为开发语言,我也就随大流加入javaer阵营. 从那时起,各种 ...
- 0级搭建类001-RedHat Enterprise Linux 8 安装(RHEL 8) 公开
项目文档引子系列是根据项目原型,制作的测试实验文档,目的是为了提升项目过程中的实际动手能力,打造精品文档AskScuti. 项目文档引子系列目前不对外发布,仅作为博客记录.如学员在实际工作过程中需提前 ...
- 深入浅出Mybatis系列四-配置详解之typeAliases别名(mybatis源码篇)
注:本文转载自南轲梦 注:博主 Chloneda:个人博客 | 博客园 | Github | Gitee | 知乎 上篇文章<深入浅出Mybatis系列(三)---配置详解之properties ...
- Hadoop报错:org.apache.hadoop.security.AccessControlException: Permission denied: user=xxxx
问题出现原因: 因为远程提交hadoop的任务的情况下如果,没有hadoop 的系统环境变量,就会读取当前主机的用户名,所以Hadoop集群的节点中没有该用户名的权限,所以出现的异常. 解决方法: S ...
- LAMP(六)之以CentOS6自带的rpm包组合安装lamp
1.Centos7部署应用wordpress 1. 安装php.php-mysql.mariadb yum install php php-mysql mariadb-server 2. 测试 cd ...
- nodepad++ | 变成 _
点击右下角切换
- yii2 分页
基于数据提供者 public function actionIndex() { $page = Yii::$app->get('page', 0); $modelClass = $this-&g ...
- UTF自动化测试工具
自UFT推出后,QTP慢慢退出历史舞台 UFT测试的基本流程:录制测试脚本—-编辑测试脚本—-调试测试脚本—-运行测试脚本—-分析测试结果 UFT(QTP)介绍 http://blog.csdn. ...