A - Middle Letter

题目描述:

给你一个长度为奇数的字符串,输出最中间的字符

思路:

水题

#include <bits/stdc++.h>
using namespace std;#define endl '\n'
#define inf 0x3f3f3f3f
#define mod7 1000000007
#define mod9 998244353
#define m_p(a,b) make_pair(a, b)
#define mem(a,b) memset((a),(b),sizeof(a))
#define io ios::sync_with_stdio(false)
#define debug(a) cout << "Debuging...|" << #a << ": " << a << "\n";
typedef long long ll;
typedef pair <int,int> pii;#define MAX 300000 + 50
int n, m, k, x;
int tr[MAX];void work(){string s;cin >> s;cout << s[s.size() / 2] << endl;
}int main(){io;work();return 0;
}

B - Modulo Number

题目描述:

给你一个n,求满足n-x是998244353的倍数的最小的非零数字x

思路:

直接对x取模即可,需要注意负数

#include <bits/stdc++.h>
using namespace std;#define endl '\n'
#define inf 0x3f3f3f3f
#define mod7 1000000007
#define mod9 998244353
#define m_p(a,b) make_pair(a, b)
#define mem(a,b) memset((a),(b),sizeof(a))
#define io ios::sync_with_stdio(false)
#define debug(a) cout << "Debuging...|" << #a << ": " << a << "\n";
typedef long long ll;
typedef pair <int,int> pii;#define MAX 300000 + 50void work(){ll n;cin >> n;cout << (n % mod9 + mod9) % mod9<< endl;
}int main(){io;work();return 0;
}

C - Convex Quadrilateral

题目描述:

给你一个四边形判断是不是凸多边形

思路:

套板子

#include <bits/stdc++.h>
using namespace std;#define endl '\n'
#define inf 0x3f3f3f3f
#define mod7 1000000007
#define mod9 998244353
#define m_p(a,b) make_pair(a, b)
#define mem(a,b) memset((a),(b),sizeof(a))
#define io ios::sync_with_stdio(false)
#define debug(a) cout << "Debuging...|" << #a << ": " << a << "\n";
typedef long long ll;
typedef pair <int,int> pii;#define MAX 300000 + 50
int n, m, k;
int x[10];
int y[10];void work(){n = 4;for(int i = 1; i <= n; ++i)cin >> x[i] >> y[i];x[n+1]=x[1];y[n+1]=y[1];x[n+2]=x[2];y[n+2]=y[2];for(int i = 3; i <= n+2; ++i){if((x[i]-x[i-2])*(y[i-1]-y[i-2])-(x[i-1]-x[i-2])*(y[i]-y[i-2])>0){cout << "No\n";return;}}cout << "Yes\n";
}int main(){io;work();return 0;
}

D - Snuke Panic (1D)

题目描述:

现在存在五个坑,下标从0到4,你现在在0的位置,每秒能移动一个距离,也可以不移动

n个物品,会在时间t[i]的时候出现在x[i]的位置,且价值是a[i]

问你最多能获得的价值最大是多少

思路:

考虑状态机dp

dp[i][j]表示时间为i的时候,位于j的位置能获得的最大价值

可以从三个状态转移过来

  • dp[i][j]=dp[i-1][j],即在第i秒不移动
  • dp[i][j]=dp[i-1][j-1],即从j-1移动到j
  • dp[i][j]=dp[i-1][j+1]即从j+1移动到j

需要注意的时候,从j+1移动的时候要看i的时候能不能到达j+1,即第二个样例

#include <bits/stdc++.h>
using namespace std;#define endl '\n'
#define inf 0x3f3f3f3f
#define mod7 1000000007
#define mod9 998244353
#define m_p(a,b) make_pair(a, b)
#define mem(a,b) memset((a),(b),sizeof(a))
#define io ios::sync_with_stdio(false)
#define debug(a) cout << "Debuging...|" << #a << ": " << a << "\n";
typedef long long ll;
typedef pair <int,int> pii;#define MAX 300000 + 50
ll n, m, t, x, a;
ll tr[MAX][5];
ll dp[MAX][5];
void work(){cin >> n;m = 0;for(int i = 1; i <= n; ++i){cin >> t >> x >> a;tr[t][x] += a;m = max(m, t);}ll ans = 0;for(int i = 1; i <= m; ++i){for(int j = 0; j < 5; ++j){ll c = (i >= j ? tr[i][j] : 0);dp[i][j] = max(dp[i - 1][j] + c, dp[i][j]);if(j > 0)dp[i][j] = max(dp[i][j], dp[i - 1][j - 1] + c);if(j < 4)dp[i][j] = max(dp[i][j], dp[i - 1][j + 1] + c);}}for(int i = 0; i < 5; ++i)ans = max(ans, dp[m][i]);cout << ans << endl;
}int main(){io;work();return 0;
}

E - Throwing the Die

题目描述:

你最多可以扔n次骰子(最大值是6),得分是你最后一轮扔到的数字,你可以选择在某轮结束后停止游戏,问你的分数的期望值最大是多少

思路:

可以发现,如果你选择继续扔骰子,那前面投的结果不会影响你的分数,所以期望仅取决于你能进行的轮数

假设dp[i],代表前i轮能得到的最大期望,则

d p [ i ] = 1 6 ( m a x ( 1 , d p [ i − 1 ] ) + m a x ( 2 , d p [ i − 1 ) + m a x ( 3 , d p [ i − 1 ] ) + m a x ( 4 , d p [ i − 1 ] ) + m a x ( 5 , d p [ i − 1 ] ) + m a x ( 6 , d p [ i − 1 ] ) ) dp[i] = \frac{1}{6}(max(1, dp[i-1])+max(2, dp[i-1) + max(3, dp[i-1]) + max(4, dp[i-1]) + max(5, dp[i-1]) + max(6, dp[i-1])) dp[i]=61​(max(1,dp[i−1])+max(2,dp[i−1)+max(3,dp[i−1])+max(4,dp[i−1])+max(5,dp[i−1])+max(6,dp[i−1]))

输出dp[n]即可

#include <bits/stdc++.h>
using namespace std;#define endl '\n'
#define inf 0x3f3f3f3f
#define mod7 1000000007
#define mod9 998244353
#define m_p(a,b) make_pair(a, b)
#define mem(a,b) memset((a),(b),sizeof(a))
#define io ios::sync_with_stdio(false)
#define debug(a) cout << "Debuging...|" << #a << ": " << a << "\n";
typedef long long ll;
typedef pair <int,int> pii;#define MAX 300000 + 50
int n, m, k, x;
double dp[MAX];
void work(){cin >> n;dp[1] = 3.5;for(int i = 2; i <= n; ++i){for(int j = 1; j <= 6; ++j){if(dp[i-1] < j)dp[i] += j;else dp[i] += dp[i - 1];}dp[i] /= 6.0;}printf("%.8f\n",dp[n]);
}int main(){io;work();return 0;
}

F - Well-defined Path Queries on a Namori

题目描述:

给你n个点,n条边,进行Q次询问,问xy之间是否存在两条不同的路径

思路:

n个点,n-1条边会形成一棵树,再此基础上再加一条边,则会形成一个环,我们把这个环扣出来,以环上的每个点为起点往周围非环的上的点去扩展,并用数组记录下来每个点是由环上的哪个点扩展而来的,判断的时候看两个点是否由同一个点扩展而来就行

可以用并查集来判是否联通,然后dfs去记录路径,扩展也可以用dfs

#include <bits/stdc++.h>
using namespace std;#define endl '\n'
#define inf 0x3f3f3f3f
#define mod7 1000000007
#define mod9 998244353
#define m_p(a,b) make_pair(a, b)
#define mem(a,b) memset((a),(b),sizeof(a))
#define io ios::sync_with_stdio(false)
#define debug(a) cout << "Debuging...|" << #a << ": " << a << "\n";
typedef long long ll;
typedef pair <int,int> pii;#define MAX 500000 + 50
int n, m, k, x, y;
struct node{int x, y;
}ar[MAX];int tot;
int head[MAX];
struct ran{int to, nex;
}tr[MAX];
inline void add(int u, int v){tr[++tot].to = v;tr[tot].nex = head[u];head[u] = tot;
}int fa[MAX];
int getfa(int x){return fa[x] == x ? x : fa[x] = getfa(fa[x]);
}int lu[MAX];
void dfs(int u, int ff){//    cout << u << ' ' << ff << endl;for(int i = head[u]; i; i = tr[i].nex){int v = tr[i].to;if(lu[v])continue;lu[v] = u;dfs(v, u);}
}
bool vis[MAX];
int dis[MAX];void ddfs(int u, int x){dis[u] = x;for(int i = head[u]; i; i = tr[i].nex){int v = tr[i].to;if(dis[v])continue;ddfs(v, x);}
}void work(){cin >> n;for(int i = 1; i <= n; ++i)fa[i] = i;vector<int>v;for(int i = 1; i <= n; ++i){cin >> ar[i].x >> ar[i].y;x = getfa(ar[i].x);y = getfa(ar[i].y);if(x == y){dfs(ar[i].x, -1);int p = ar[i].y;while(p!=ar[i].x){v.push_back(p);vis[p] = 1;p = lu[p];}vis[ar[i].x] = 1;v.push_back(ar[i].x);}else fa[x] = y;add(ar[i].x, ar[i].y);add(ar[i].y, ar[i].x);}for(auto x : v)dis[x] = x;for(auto x : v)ddfs(x, x);cin >> m;while(m--){cin >> x >> y;if(dis[x] == dis[y])cout << "Yes\n";else cout << "No\n";}
}int main(){io;work();return 0;
}

AtCoder Beginner Contest 266 「A」「B 取模」「C 凸多边形」「D 状态机dp」「E 概率dp」「F 思维+dfs」相关推荐

  1. AtCoder Beginner Contest 266(C- G)「判凸包」「dp」「期望」「基环树」「组合数」

    abc好好好. C - Convex Quadrilateral (atcoder.jp) 思路: 判凸包,向量叉积×=|a|*|b|*sin.叉积<0即角>180°. (可以勉勉强强算我 ...

  2. AtCoder Beginner Contest 272「A」「B」「C」「D bfs」「E 思维」

    AtCoder Beginner Contest 272 A - Integer Sum 题目描述: 输入n个数字,求数字和 #include <bits/stdc++.h> using ...

  3. freee Programming Contest 2022(AtCoder Beginner Contest 264)A~D题详细讲解

    目录 博主赛情 网站链接 比赛简介 Contest Information Reason why freee needs AtCoder users freee's business content ...

  4. AtCoder Beginner Contest 202 D - aab aba baa(组合计数,字典序)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Problem 有 AAA 和 aaa,BBB 个 bbb ,可以使用这 A+BA+BA+B 个字符任 ...

  5. AtCoder Beginner Contest 197 题解(A ~ F)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A - Rotate B - Visibility C - ORXOR D - Opposite ...

  6. AtCoder Beginner Contest 198 (A ~ F)题解

    目录 A. Div B. Palindrome with leading zeros C. Compass Walking D. Send More Money E. Unique Color F. ...

  7. AtCoder Beginner Contest 215 G - Colorful Candies 2

    AtCoder Beginner Contest 215 G - Colorful Candies 2 有n个糖果,每个糖果有着一个颜色a[i],每次拿k个糖果期望拿到E(x)个不同颜色的糖果,求出k ...

  8. AtCoder Beginner Contest 215 F - Dist Max 2

    AtCoder Beginner Contest 215 F - Dist Max 2 平面上有一系列的点(xi,yi)(x_i,y_i)(xi​,yi​),定义两点(xi,yi),(xj,yj)(x ...

  9. AtCoder Beginner Contest 215 E - Chain Contestant

    AtCoder Beginner Contest 215 E - Chain Contestant 给出一个只包括A~J的字符串,定义一种子序列为:在这个子序列中,相同的字符必定连续出现,求出这样的子 ...

最新文章

  1. 建立一个php 基础类
  2. 知道邻边和斜边求角度_从数学史角度看数系发展
  3. cauchy problem of 1st order PDE from Partial Differential Equations
  4. mysql 基础选择题_mysql基础12(mysql练习题)
  5. CodeForces - 1331E Jordan Smiley(图形转换)
  6. HDU 1978 How many ways DP问题
  7. echarts固定柱子宽度(barWidth)
  8. app 缓存html页面,HTML5本地存储VS App缓存离线网站浏览
  9. win10安装Anaconda+tensorflow2.0-CPU+Pycharm
  10. java学习笔记day14—HTML
  11. 植被抽稀lisp程序_地形图缩编中植被符号抽稀方法.doc
  12. java log4j trace_关于LOG4J中的日志级别TRACE
  13. 我们所知道的压电材料参数及压电方程式ZJ-3型压电测试仪
  14. 【神经网络分类器】(三)深度学习发展史——从深度信念网络到AlexNet
  15. 【太经典】如果有人问你数据库的原理,叫他看这篇文章
  16. 安装了多个java 如何切换java版本
  17. Rasa Events 之AllSlotsReset Restarted源码详解
  18. EndnoteX9简介及基本教程使用说明
  19. python咋变汉语_Python3实现汉语转换为汉语拼音
  20. OnlyOffice 二次开发定制化部署

热门文章

  1. 手机通讯录AddressBook的使用
  2. 在mysql中通配符_mysql查询中通配符的使用
  3. ffmpeg官网关于射手播放器违反GPL协议讨论之中文版
  4. Linux下修改java.library.path
  5. php安装与下载,学习PHP网站开发 连载——PHPCMS的下载与安装详解
  6. 学习笔记(01):教你玩转HTML(html5)h5网页设计,网站开发-浏览
  7. 2004年考研数学一真题pdf
  8. [vscode] - 设置空格Whitespace的颜色
  9. Codeforces 1080E - Sonya and Matrix Beauty - Manacher
  10. 关于Android 模拟器复制粘贴及中文输入的问题