ABC201题解
因为学校的某些操作。
让最近两天的\(Atcoder\)都能打了,挺开心的。
想上次\(ABC\)看错题意,失败退场。
——————————————————————————————
\(A\)
直接手动判断六种排列。
A
#include<iostream>
#include<cstdio>
#define ll long long
ll a,b,c;
int main(){
scanf("%lld%lld%lld",&a,&b,&c);
//abc acb bac bca cab cba
if((b - a) == (c - b) || (c - a) == (b - c) || (a - b) == (c - a) || (c - b) == (a - c) || (a - c) == (b - a) || (b - c) == (a - b))
puts("Yes");
else
puts("No");
}
\(B\)
B
#include<iostream>
#include<cstdio>
#include<algorithm>
#define ll long long
#define M 20
#define N 10000
struct P{
char a[M];
int key;
}e[N];
bool operator < (P a,P b){
return a.key > b.key;
}
ll n;
int main(){
scanf("%lld",&n);
for(int i = 1;i <= n;++i)
scanf("%s%d",e[i].a + 1,&e[i].key);
std::sort(e + 1,e + n + 1);
std::cout<<e[2].a + 1<<std::endl;
}
\(C\)
考虑到只有四位数,所以直接枚举并判断是否合法就行。
C
#include<iostream>
#include<cstdio>
#define ll long long
char ai[20];
ll ans;
inline bool check(ll now){
ll a = now / 1000,b = now % 1000 / 100,c = now % 100 / 10,d = now % 10;
for(int i = 0;i <= 9;++i)
if(ai[i] == 'o' && a != i && b != i && c != i && d != i)
return false;
else
if(ai[i] == 'x' && (a == i || b == i || c == i || d == i))
return false;
return true;
}
int main(){
scanf("%s",ai);
for(int i = 0;i <= 9999;++i){
if(check(i))
ans ++ ;
}
std::cout<<ans<<std::endl;
}
\(D\)
没想到\(ABC\)还考\(min-max\)对抗搜索,考虑记录的答案是第一手比第二手高多少分就行了。(据说正解是反着\(dp\))
D
#include<iostream>
#include<cstdio>
#define ll long long
#define N 2005
ll h,w;
ll p[2005][2005],f[N][N];
bool v[N][N];
ll x,y;
inline ll dfs(int turn){
if(v[x][y])return f[x][y];
ll ans = turn ? -0x7f7f7f7f : 0x7f7f7f7f;
if(x + 1 <= h){
x += 1;
if(turn)
ans = std::max(ans,dfs(0) + p[x][y]);
else
ans = std::min(ans,dfs(1) - p[x][y]);
x -= 1;
}
if(y + 1 <= w){
y += 1;
if(turn)
ans = std::max(ans,dfs(0) + p[x][y]);
else
ans = std::min(ans,dfs(1) - p[x][y]);
y -= 1;
}
// std::cout<<turn<<" "<<x<<" "<<y<<" "<<ans<<std::endl;
v[x][y] = 1;
return f[x][y] = ans;
}
int main(){
scanf("%lld%lld",&h,&w);
for(int i = 1;i <= h;++i)
for(int j = 1;j <= w;++j){
char a;
while(a != '+' && a != '-')
a = getchar();
if(a == '+')
p[i][j] = 1;
else
p[i][j] = -1;
a = 'q';
}
x = 1,y = 1;
v[h][w] = 1,f[h][w] = 0;
ll k = dfs(1);
// std::cout<<k<<std::endl;
if(k > 0)
puts("Takahashi");
if(k == 0)
puts("Draw");
if(k < 0)
puts("Aoki");
}
\(E\)
考虑这种树上数对统计答案问题,是可以换根做的。考虑在某个点(\(x\))为根时,求出答案为\(\sum_i dis(x,i)\)就行了。
对于换根操作,考虑到要换到的点到根的异或距离为\(k\),则他到每个点的距离都要异或\(k\),
考虑分位,单位算贡献就好了。
E
#include<iostream>
#include<cstdio>
#define ll long long
#define N 200005
#define mod 1000000007
ll head[N],cnt;
ll n,dis[N],c[N],a[N];
struct P{int to,next;ll wi;}e[N * 2];
inline void add(int x,int y,ll w){
e[++cnt].to = y;
e[cnt].next = head[x];
e[cnt].wi = w;
head[x] = cnt;
}
inline void dfs1(int u,int f){
for(int i = head[u];i;i = e[i].next){
int v = e[i].to;
if(v == f)
continue;
dis[v] = dis[u] ^ e[i].wi;
dfs1(v,u);
}
}
ll ans = 0;
inline void dfs2(int u,int f){
ll k;
for(int i = 0;i < 60;++i){
if(dis[u] & (1ll << i))k = n - c[i];
else
k = c[i];
ans += (1ll << i) % mod * k % mod;
ans %= mod;
}
for(int i = head[u];i;i = e[i].next){
int v = e[i].to;
if(v == f)
continue;
dfs2(v,u);
}
}
int main(){
scanf("%lld",&n);
for(int i = 1;i <= n - 1;++i){
ll u,v,w;
scanf("%lld%lld%lld",&u,&v,&w);
add(u,v,w);
add(v,u,w);
}
dfs1(1,0);
for(int i = 1;i <= n;++i)
for(int j = 0;j < 60;++j)
if(dis[i] & (1ll << j))c[j] ++ ;
dfs2(1,0);
std::cout<<ans * (500000004) % mod<<std::endl;
}
ABC201题解的更多相关文章
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
- CF100965C题解..
求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...
随机推荐
- 浅尝装饰器--property装饰器
[写在前面] 本帖归属于装饰器单元的学习,可以点击关键词'装饰器'查看其他博文讲解 [正文部分] property属性:将类方法用类属性的形式进行调用 class Good: def __init__ ...
- T-SQL——关于XML类型
目录 0. 将结果集转化为XML格式 1. 列值拼接为字符串 2. 字符串转换为列值 3. 一些说明 参考 志铭-2021年10月23日 10:43:21 0. 将结果集转化为XML格式 测试数据 I ...
- 【Java虚拟机11】线程上下文类加载器
前言 目前学习到的类加载的知识,都是基于[双亲委托机制]的.那么JDK难道就没有提供一种打破双亲委托机制的类加载机制吗? 答案是否定的. JDK为我们提供了一种打破双亲委托模型的机制:线程上下文类加载 ...
- DDD领域驱动设计-项目包结构说明-Ⅳ
基于DDD领域驱动设计的思想,在开发具体系统时,需要先建立不同的层级包.主要是梳理不同层面(应用层,领域层,基础设施层,展示层)包括的功能目录,每一个层面应该包括哪些模块.本例所讲述的分层是DDD落 ...
- IDA*、操作打表、并行处理-The Rotation Game HDU - 1667
万恶之源 优秀题解 用文字终究难以穷尽代码的思想 思路 每次操作都有八种选择,相当于一棵每次延申八个子节点的搜索树,故搜索应该是一种方法.而这题要求求最少步数,我们就可以想到可以试试迭代加深搜索(但其 ...
- 从零开始搭建你的nvim ide
前言概述 vim由于其丰富的扩展性.出色的跨平台性.高效率的操作性深受一大批粉丝的追捧,甚至就连vim和emacs之间孰优孰劣的话题都能被引起一场编辑器之间的圣战,足以见vim是多么的优秀. vim的 ...
- SpringCloud微服务实战——搭建企业级开发框架(十五):集成Sentinel高可用流量管理框架【熔断降级】
Sentinel除了流量控制以外,对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一.由于调用关系的复杂性,如果调用链路中的某个资源不稳定,最终会导致请求发生堆积.Sentinel ...
- AliRTC 开启视频互动 “零计算” 时代
在 2021 云栖大会<产业视频化创新与最佳实践>视频云主题论坛中,阿里云智能高级技术专家在<AliRTC 开启视频互动 "零处理" 时代>的主题演讲中,发 ...
- pip 更新方法
使用python -m pip install --upgrade pip 使用python -m pip install -U --force-reinstall pip 使用pip install ...
- 深入剖析 RocketMQ 源码 - 消息存储模块
一.简介 RocketMQ 是阿里巴巴开源的分布式消息中间件,它借鉴了 Kafka 实现,支持消息订阅与发布.顺序消息.事务消息.定时消息.消息回溯.死信队列等功能.RocketMQ 架构上主要分为四 ...