AtCoder ABC 243

A Shampoo(水)

Description:

​ 三个人轮流用水 请问用到谁的时候水就用完了

Method:

​ 水题 但是因为%和/用错了 导致蛙了好几次

​ 分类讨论 如果一轮用不完 就取余再判断 如果一轮用得完 直接判断

Code:

void solve()
{int v, a, b, c;cin >> v >> a >> b >> c;int sum = a + b + c;int t =  v % sum;if(sum > v)  {if(a > v)   {cout << "F"; return;}else if(a + b > v)  {cout << "M"; return;}else {cout << "T"; return;}}  else{if(a > t)   {cout << "F"; return;}else if(a + b > t)  {cout << "M"; return;}else {cout << "T"; return;}}
}

B Hit and Blow(水)

Description:

​ 给定两个数组a b 判断数组中位置和数值都相同的个数 & 位置不同数值相同的个数

Method:

​ map查重咯

Code:

void solve()
{int n;cin >> n;for(int i = 1; i <= n; i++)cin >> a[i];for(int i = 1; i <= n; i++)cin >> b[i];int res1 = 0, res2 = 0;for(int i = 1; i <= n; i++)mp[a[i]] = true;for(int i = 1; i <= n; i++)if(mp[b[i]])    res2 ++;for(int i = 1; i <= n; i++)if(a[i] == b[i])    res2 --, res1 ++;cout << res1 << '\n' << res2;
}

C Collision 2(水)

Description:

​ 给出n个点的坐标和行进方向 若是两个坐标会相遇 输出yes

Method:

​ 显然 判断yes更简单 我们进行排序 然后对相同纵坐标进行判断 若是左边的点向右走 右边的点向左走 YES

Code:

struct node
{int x, y, op; // op 0 L  op 1 Rbool operator< (const node & E) const {if(y == E.y)    return x < E.x;return y < E.y;}
}q[200010];void solve()
{int n;cin >> n;for(int i = 0; i < n; i++)cin >> q[i].x >> q[i].y;string s;cin >> s;for(int i = 0; i < n; i++){if(s[i] == 'L') q[i].op = 0;else q[i].op = 1;}sort(q, q + n);for(int i = 1; i < n; i++){if(q[i].y != q[i - 1].y)    continue;if(q[i - 1].op == 1 && q[i].op == 0) {puts("Yes"); return;}}puts("No");
}

D Moves on Binary Tree(二叉树)

Description:

​ 给出当前节点 对节点进行一个1e6的操作 每次操作选择移动到他的父节点 左儿子 或者右儿子

​ 节点数会在longlong的极限左右 但保证最终答案一定在longlong范围内

Method:

​ 因为给的节点数字很大 用高精度模拟会TLE 正常模拟会爆long

​ 我的猜想就是消除题目中的U 和 L 但是经验证不对

​ 因为R是 x * 2 + 1 而U是 x / 2 这一点就带来了误差

1 消除相邻的UL 和 RL 因为R仅仅是加了一次1 这时直接除2并不会造成影响 且保证答案在LL内

2 将节点化为二进制串表示并进行二进制的计算 然后再转回十进制

Code:

stack<char> stk;void solve()
{int n;LL x;cin >> n >> x;string s;cin >> s;int l, r;for(int i = 0; i < n; i++){if(!stk.empty())  {if((s[i] == 'U' && (stk.top() == 'L' || stk.top() == 'R'))) stk.pop();else    stk.push(s[i]);}else stk.push(s[i]);}string res;while(stk.size())   res += stk.top(), stk.pop();reverse(res.begin(), res.end());for(int i = 0; i < res.size(); i++){if(res[i] == 'L')       x *= 2;else if(res[i] == 'R')  x = x * 2 + 1;else                    x /= 2;}cout << x << '\n';
}
string get_(LL x)//十转二
{string res;while(x){res += '0' + (x % 2);x /= 2;}reverse(res.begin(), res.end());return res;
}void solve()
{int n; LL x;cin >> n >> x;string s;cin >> s;string nums = get_(x);for(int i = 0; i < n; i++){if(s[i] == 'R')     nums += '1';else if(s[i] == 'L')    nums += '0';else    nums.erase(nums.end() - 1);}int m = nums.size();LL res = 0;reverse(nums.begin(), nums.end());for(int i = 0; i < m; i++)//二转十{LL t = nums[i] - '0';res += t * (1LL << i);}cout << res << '\n';
}

E Edge Deletion(图论 + 构造)

Description:

​ 给定n个顶点m条边 保证不会出现重边和自环

​ 请尝试删去最多的边(在不影响原有两点之间路径长度以及保持图的联通)

Method:

​ 原有两点路径看起来很复杂 其实就是对最短路查重 若是如样例一一般 最短路有两条 且权相同 可以删去

​ 我们先通过flody跑一遍最短路 然后遍历两个顶点和中转点询问是否存在最短路重复

Code:

int n, m;// point n  edge m
int a, b;
LL c;
LL mp[310][310];void solve()
{cin >> n >> m;for(int i = 1; i <= n; i++)for(int j = 1; j <= n; j++)mp[i][j] = (i == j) ? 0 : INF;for(int i = 0; i < m; i++){cin >> a >> b >> c;mp[a][b] = c;mp[b][a] = c;}for(int k = 1; k <= n; k++)for(int i = 1; i <= n; i++)for(int j = 1; j <= n; j++)mp[i][j] = min(mp[i][j], mp[i][k] + mp[k][j]);int res = 0; //保留的边数for(int i = 1; i <= n; i++)for(int j = 1; j <= n; j++)if(i != j){int rem = 1;for(int k = 1; k <= n; k++) if(i != k && j != k && mp[i][j] == mp[i][k] + mp[k][j]) //存在这种情况的时候 可以去掉一个边rem = 0;res += rem;}cout << m - res / 2 << '\n'; //因为正反都扫了一遍 所以保留的边数/2
}

F Lottery(不会)

Description:

Method:

Code:

G Sqrt(DP + 前缀和 + 优化)

Description:

Method:

​ 尽力去听了 但是还是不懂 放一串代码吧

Code:

#include <bits/stdc++.h>using namespace std;
//多组输入的初始化
//判断是否需要LL#define ios ios::sync_with_stdio(false);cin.tie(0);
#define endl '\n'
#define ms(x, y)    memset(x, y, sizeof x)
typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int, int> PII;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int N = 1000010;
LL dp[N], pre[N];LL is_sqrt(LL x)
{LL sqrtX = sqrt(x) - 1;while(sqrtX + 1 <= x / (sqrtX + 1)) sqrtX ++;return sqrtX;
}void solve()
{cin >> x;LL x2 = is_sqrt(x);LL x4 = is_sqrt(x2);LL res = 0;for(int i = 1; i <= x4; i++)res += (x2 - 1LL * i * i + 1) * dp[i];cout << res << '\n';
}int main()
{ios;dp[1] = 1;pre[1] = 1;for(int i = 2; i <= N; i++)dp[i] = pre[is_sqrt(i)], pre[i] = pre[i - 1] + dp[i];int _;cin >> _;while(_--)  solve();return 0;
}

AtCoder ABC 243题解相关推荐

  1. Atcoder abc 233 题解

    Atcoder abc 233 题解 A 10yen Stamp 答案就是两个数字的差/10之后上取整 记得判断res=0的情况就可以了 c++代码 #include<iostream> ...

  2. AtCoder ABC 250 总结

    AtCoder ABC 250 总结 总体 连续若干次一样的结果:30min 切前 4 题,剩下卡在 T5 这几次卡在 T5 都是一次比一次接近, 什么 dp 前缀和打挂,精度被卡,能水过的题连水法都 ...

  3. AtCoder beginner contest 43 (ABC 43)题解

    B题:Unhappy HackingProblem 给定一个字符串和一个空串,字符串只包含01B三种字符,从字符串首开始,若为0/1则在空串后添加0/1; 若为B且字符串不为空,则删除字符串最后一个字 ...

  4. AtCoder ABC 127F Absolute Minima

    题目链接:https://atcoder.jp/contests/abc127/tasks/abc127_f 题目大意 初始状态下$f(x) = 0$,现在有 2 种模式的询问,第一种以"1 ...

  5. AtCoder abc256全题解(区间合并模板、矩阵快速幂优化dp、线段树……)

    文章目录 A B C-枚举 D-区间合并模板 E-图论建模,函数图的性质 题意 思路 代码 F-树状数组 题意 思路 代码 G-矩阵快速幂优化dp H-线段树 思路 实现 传送门 本文CSDN 本文j ...

  6. Atcoder abc A~E

    ABC 265 A~E A 题意:你要买 n 个苹果,买 1 个要 x 元,买 3 个要 y 元,问最少要花多少钱 解法:判断 3*x 是否小于 y,然后输出 Code : # include < ...

  7. AtCoder - ABC 167 - E(数学推理+组合数)

    E - Colorful Blocks 题意: 有 m 种颜色,给 n 个方块染色,可以不使用所有颜色,要求最多有 k 对相邻方块同色.问染色的总情况,最终结果模  998244353. 数据范围: ...

  8. AtCoder - ABC 178 - C~F

    C - Ubiquity(容斥原理/DP) 题意: 求满足以下条件的长为 n 的不同序列的个数: 1.0 ≤  ≤9 2.序列中至少有一个 =0 3.序列中至少有一个 =9 答案对 +7 取模. 数据 ...

  9. 蓝桥杯国赛 C/C++ ABC组题解(第四届 ~ 第十二届)

    2020年第十一届蓝桥杯国赛 题号 类型 C++ A组 C++ B组 C++ C组 试题A 结果填空 合数个数 美丽的 2 美丽的 2 试题B 结果填空 含 2 天数 (日期处理) 扩散 (BFS) ...

  10. AtCoder ABC 249

    A Jogging 没看清楚题 a不是移速 所以卡了十分钟 语法题 int main() {int a, b, c, d, e, f, x;cin >> a >> b > ...

最新文章

  1. device.cpp
  2. 3行代码给你的python提速4倍!
  3. 一个月时间整理《深入浅出Node.js》
  4. macos访问linux分区,在linux中访问macos 下的分区。
  5. 数据库系统原理(第三章数据库设计 )
  6. rust如何改睡袋_腐蚀rust怎么做睡袋 | 手游网游页游攻略大全
  7. Hadoop伪分布安装详解(一)
  8. selenium java po模式_selenium + java po模式
  9. 演示:思科交换机的Telnet管理与SSH管理
  10. 基于 VEthernet 轻松实现 tun2socks 示例程序
  11. 拔丝芋头的Java学习日记---Day9
  12. 2 资源关系 | 到底什么是”局“-- 清华宁向东的管理学课总结
  13. 华南理工大学珠海学院计算机,慕了!盘点那些有“私家游泳池”的广东高校!考上就算捡到啦!...
  14. 认证资料大全(八)------ SUN认证列表
  15. Loadrunner之关联——用小故事理解
  16. Hugging Face创始人亲述:一个GitHub史上增长最快的AI项目
  17. k8s笔记3--Kubernetes IDE Lens
  18. RPA下基层·社区医疗RPA丨居民医疗档案签约机器人
  19. ubuntu修改属组时chown: 无法访问‘bangbang‘: 没有那个文件或目录
  20. IT市场:英文求职信模板二

热门文章

  1. 如何使用数字化系统裂变推广?常用的营销系统功能推荐
  2. IBM Cluster 1350与CSM
  3. 嵌入式开发板硬件操作入门学习2——LED电路与操作
  4. 2012年手机/社交游戏行业的主要传闻与争议
  5. 句子时态(通过谓语来判断)、一般现在时、一般过去时、一般将来时、过去将来时
  6. thinkpad e570 如何进入bios
  7. 冬季养胃就多喝红茶哦
  8. FPT Software的数字解决方案在2020年国际商务大奖(R)评选中名列前茅
  9. 电影票预订与选座系统开发(java源码开源)
  10. 【VB.Net】最直白的TcpListener监听代码