链接: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简要题解的更多相关文章

  1. Codeforces Round #609 (Div. 2)前五题题解

    Codeforces Round #609 (Div. 2)前五题题解 补题补题…… C题写挂了好几个次,最后一题看了好久题解才懂……我太迟钝了…… 然后因为longlong调了半个小时…… A.Eq ...

  2. Codeforces Round #614 (Div. 2) C - NEKO's Maze Game

    题目链接:http://codeforces.com/contest/1293/problem/C 题目:给定一个 2*n的地图,初始地图没有岩浆,都可以走, 给定q个询问,每个询问给定一个点(x,y ...

  3. Codeforces Round #614 (Div. 2) D

    变色失败 只加8分 距离变色只差5分 B题没想到那么简单,结论秒猜,不敢交,傻傻验证5分钟. C题也想了码了好一会儿,我动态维护set做的. 1小时3题,整体难度好像没以前那么大了?(虽然也不强,但比 ...

  4. Codeforces Round #614 (Div. 2)E(思维,构造,DP)

    构造边权,从0开始给边赋值,初始选取一条边权为0,每次赋值的贡献为这一条链两侧的结点(包含链的端点)个数之积,下一次赋值以当前链其一端点续一条边,边权为上次赋的值+1.先DFS找到点的组合这条链两侧结 ...

  5. Codeforces Round #614 (Div. 1) A. NEKO's Maze Game (思维,模拟)

    题意:有一个\(2\)X\(n\)的矩阵,你想从\((1,1)\)走到\((2,n)\),每次可以向上下左右四个方向走,但在某些时间段某个点会被堵住,如果已经被堵住,那么即恢复正常,每次对某个点操作, ...

  6. Codeforces Round #556 (Div. 2) D. Three Religions 题解 动态规划

    题目链接:http://codeforces.com/contest/1150/problem/D 题目大意: 你有一个参考串 s 和三个装载字符串的容器 vec[0..2] ,然后还有 q 次操作, ...

  7. Codeforces Round #604 (Div. 2) E. Beautiful Mirrors 题解 组合数学

    题目链接:https://codeforces.com/contest/1265/problem/E 题目大意: 有 \(n\) 个步骤,第 \(i\) 个步骤成功的概率是 \(P_i\) ,每一步只 ...

  8. Codeforces Round #624 (Div. 3) F. Moving Points 题解

    第一次写博客 ,请多指教! 翻了翻前面的题解发现都是用树状数组来做,这里更新一个 线段树+离散化的做法: 其实这道题是没有必要用线段树的,树状数组就能够解决.但是个人感觉把线段树用熟了会比树状数组更有 ...

  9. Codeforces Round #677 (Div. 3) E、G题解

    E. Two Round Dances #圆排列 题目链接 题意 \(n\)(保证偶数)个人,要表演一个节目,这个节目包含两种圆形舞蹈,而每种圆形舞蹈恰好需要\(n/2\)个人,每个人只能跳一种圆形舞 ...

随机推荐

  1. [Python机器学习]鸢尾花分类 机器学习应用

    1.问题简述 假设有一名植物学爱好者对她发现的鸢尾花的品种很感兴趣.她收集了每朵鸢尾花的一些测量数据: 花瓣的长度和宽度以及花萼的长度和宽度,所有测量结果的单位都是厘米. 她还有一些鸢尾花的测量数据, ...

  2. Educational Codeforces Round 79 (Rated for Div. 2) Finished (A-D)

    如果最大值比剩余两个加起来的总和+1还大,就是NO,否则是YES #include<bits/stdc++.h> using namespace std; int main(){ int ...

  3. PAT (Advanced Level) Practice 1011 World Cup Betting (20 分) (找最值)

    With the 2010 FIFA World Cup running, football fans the world over were becoming increasingly excite ...

  4. Android_SQLite简单的增删改查

    SQLite数据库,和其他的SQL数据库不同, 我们并不需要在手机上另外安装一个数据库软件,Android系统已经集成了这个数据库,我们无需像 使用其他数据库软件(Oracle,MSSQL,MySql ...

  5. ubantu crontab定时任务设置

    Lynx浏览器安装.安装命令:sudo apt-get install lynx.打开终端输入:crontab -e若初次执行会出现以下(选择编译器,一般选4(Vim))Select an edito ...

  6. equals 为什么要把常量写在前面?

    看例子 使用str1.equals("abc"); 如果str1是null,空是没有equals方法的,会抛出空指针异常 如果"abc".equals(str1 ...

  7. 小总结:快速幂+贪心————Bit Mask____UVA 10718 多多去理解去温习哦!

    传送门:https://vjudge.net/problem/UVA-10718 Preview: bitstream:a flow of data in binary form. in bit-wi ...

  8. VsCode开发Java SpringBoot遇到的问题

    报错截图 报错一:Build failed, Do you want to continue? 编译失败,你想继续吗? 报错二:ConfigError:The Project "Demo&q ...

  9. cenos7 安装samba

    1)安装samba应用# yum install samba samba-client2)启动Samba应用 systemctl start smb nmb3)Samba配置文件 /etc/samba ...

  10. CentOS 7在执行yum操作时 报错

    CentOS 7在执行yum操作时, 报错:Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=6&arch ...