A. A Hard Problem

在全排列1到n中每k个数作为一段,每段必存在u,v使得u是v的一个因子,考虑每段最短是多长,直接倒着考虑,假如n=6,最后肯定是要3...6才能符合题意,假如n=7,最后必须是3...7才能符合题意...以此类推,发现每一段必定是+1个数,才能符合题意

AC代码:

#include <bits/stdc++.h>
#define rep(i,a,n) for(int i=a;i<n;i++)
using namespace std;
using LL = long long;void Solve() {int n;cin >> n;int k = (n + 1) / 2;cout << k + 1 << '\n';
}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int T;cin >> T;rep (i, 0, T) {Solve();}return 0;
}

C. Digital Path

这个题他问的是1->2->3->4->...中至少走连续四步的个数,需要记录的是每个点的出度和入度,以及只有入度为0的点才可以放进队列里进行bfs,剩下的可以dp解决,考虑走到(i,j)这个点时用了k步进行转移,为了不重复的计算一条路径,可以每次到一个点就将这个点的入度-1,直到入度减为0再将它放进队列里等待下次bfs它,最后统计每个出度不为0、走四步及以上能走到它的点的方案数

AC代码:

#include <bits/stdc++.h>
#define rep(i,a,n) for(int i=a;i<n;i++)
using namespace std;
using LL = long long;const int mod = 1e9 + 7;int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int n, m;cin >> n >> m;vector<vector<int>> in(n + 1, vector<int> (m + 1));vector<vector<int>> out(n + 1, vector<int> (m + 1));vector<vector<int>> mp(n + 1, vector<int> (m + 1));vector<vector<vector<int>>> dp(n + 1, vector<vector<int>> (m + 1, vector<int> (5)));for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {cin >> mp[i][j];}}const vector<int> movx {-1, 0, 1, 0};const vector<int> movy {0, 1, 0, -1};for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {for (int k = 0; k < 4; k++) {int xx = i + movx[k], yy = j + movy[k];if (xx < 1 || xx > n || yy < 1 || yy > m) {continue;}if (mp[i][j] == mp[xx][yy] + 1) {in[i][j]++;}if (mp[i][j] == mp[xx][yy] - 1) {out[i][j]++;}}}}queue<pair<int, int>> qu;for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {if (!in[i][j]) {dp[i][j][1] = 1;qu.push(make_pair(i, j));}}}while (!qu.empty()) {int x = qu.front().first, y = qu.front().second;qu.pop();for (int i = 0; i < 4; i++) {int xx = x + movx[i], yy = y + movy[i];if (xx < 1 || xx > n || yy < 1 || yy > m) {continue;}if (mp[x][y] + 1 == mp[xx][yy]) {dp[xx][yy][2] = (dp[xx][yy][2] + dp[x][y][1]) % mod;dp[xx][yy][3] = (dp[xx][yy][3] + dp[x][y][2]) % mod;dp[xx][yy][4] = (dp[xx][yy][4] + dp[x][y][3] + dp[x][y][4]) % mod;if (--in[xx][yy] == 0) {qu.push(make_pair(xx, yy));}}}}int ans = 0;for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {if (!out[i][j]) {ans = (ans + dp[i][j][4]) % mod;}}}cout << ans << '\n';return 0;
}

K. Triangle

题意是给出一个三角形和一个点,判断三角形上是否存在另一个点使得两点所成线段将三角形面积一分为二,首先要判断的是给出的点是否在三角形的边上,其次可以判断给出的点在三边的哪条边上,然后判断给出的点在这条边的靠近哪个顶点处,然后可以通过画出三角形来判断要输出的点应该在哪条边上,然后二分判断线段切割的面积即可,建议使用较快的输入输出和C++版本

AC代码:

#include <bits/stdc++.h>
#define rep(i,a,n) for(int i=a;i<n;i++)
using namespace std;
using LL = long long;
const double eps = 1e-8;
int sgn(double x){if(fabs(x) < eps)return 0;if(x < 0)return -1;else return 1;
}struct Point{double x, y;Point(){}Point(double _x, double _y){x = _x;y = _y;}void input(){scanf("%lf%lf", &x, &y);}bool operator == (Point b)const{return sgn(x-b.x) == 0 && sgn(y-b.y) == 0;}Point operator -(const Point &b)const{return Point(x-b.x, y-b.y);}//叉积double operator ^(const Point &b)const{return x*b.y - y*b.x;}//点积double operator *(const Point &b)const{return x*b.x + y*b.y;}//返回两点的距离double dis(Point p){return hypot(x-p.x, y-p.y);}Point operator +(const Point &b)const{return Point(x+b.x, y+b.y);}Point operator *(const double &k)const{return Point(x*k, y*k);}Point operator /(const double &k)const{return Point(x/k, y/k);}
};struct Line{Point s,e;Line(){}Line(Point _s,Point _e){s = _s;e = _e;}// 点在线段上的判断bool pointonseg(Point p){return sgn((p-s)^(e-s)) == 0 && sgn((p-s) * (p-e)) <= 0;}// 求两直线的交点Point crosspoint(Line v){double a1 = (v.e-v.s)^(s-v.s);double a2 = (v.e-v.s)^(e-v.s);return Point((s.x*a2-e.x*a1)/(a2-a1),(s.y*a2-e.y*a1)/(a2-a1));}
};// 求点a和点b的中点
Point get_mid(Point a, Point b) {return (a + b) * 0.5;
}// 根据三个点计算三角形面积
double area(Point a,Point b,Point c)
{return fabs((b - a) ^ (c - a) * 0.5);
}void Solve() {Point a, b, c, p;Line ab, bc, ac;a.input(), b.input(), c.input(), p.input();ab = Line(a, b), ac = Line(a, c), bc = Line(b, c);double s1 = area(a, b, c) / 2;if (!ab.pointonseg(p) && !ac.pointonseg(p) && !bc.pointonseg(p)) {puts("-1\n");return;}if (ab.pointonseg(p)) {//abif (a.dis(p) < b.dis(p)) {Point l = b, r = c;Point mid = get_mid(l, r);for (int i = 0; i < 50; i++) {mid = get_mid(l, r);double s2 = area(mid, p, b);int flag = sgn(s2 - s1);if (flag == 0) {break;}else if (flag == 1) {r = mid;}else {l = mid;}}printf("%.10lf %.10lf\n", mid.x, mid.y);}else {Point l = a, r = c;Point mid = get_mid(l, r);for (int i = 0; i < 50; i++) {mid = get_mid(l, r);double s2 = area(mid, p, a);int flag = sgn(s2 - s1);if (flag == 0) {break;}else if (flag == 1) {r = mid;}else {l = mid;}}printf("%.10lf %.10lf\n", mid.x, mid.y);}}else if (ac.pointonseg(p)) {//acif (a.dis(p) < c.dis(p)) {Point l = c, r = b;Point mid = get_mid(l, r);for (int i = 0; i < 100; i++) {mid = get_mid(l, r);double s2 = area(mid, p, c);int flag = sgn(s2 - s1);if (flag == 0) {break;}else if (flag == 1) {r = mid;}else {l = mid;}}printf("%.10lf %.10lf\n", mid.x, mid.y);}else {Point l = a, r = b;Point mid = get_mid(l, r);for (int i = 0; i < 50; i++) {mid = get_mid(l, r);double s2 = area(mid, p, a);int flag = sgn(s2 - s1);if (flag == 0) {break;}else if (flag == 1) {r = mid;}else {l = mid;}}printf("%.10lf %.10lf\n", mid.x, mid.y);}}else {//bcif (b.dis(p) < c.dis(p)) {Point l = c, r = a;Point mid = get_mid(l, r);for (int i = 0; i < 50; i++) {mid = get_mid(l, r);double s2 = area(mid, p, c);int flag = sgn(s2 - s1);if (flag == 0) {break;}else if (flag == 1) {r = mid;}else {l = mid;}}printf("%.10lf %.10lf\n", mid.x, mid.y);}else {Point l = b, r = a;Point mid = get_mid(l, r);for (int i = 0; i < 50; i++) {mid = get_mid(l, r);double s2 = area(mid, p, b);int flag = sgn(s2 - s1);if (flag == 0) {break;}else if (flag == 1) {r = mid;}else {l = mid;}}printf("%.10lf %.10lf\n", mid.x, mid.y);}}
}int main() {int T;scanf("%d", &T);rep (i, 0, T) {Solve();}return 0;
}

The 2019 ICPC Asia Nanjing Regional Contest(A、C、K)相关推荐

  1. The 2019 ICPC Asia Shanghai Regional Contest

    The 2019 ICPC Asia Shanghai Regional Contest 题号 题目 知识点 A Mr. Panda and Dominoes B Prefix Code C Maze ...

  2. 2019 ICPC Asia Nanjing Regional J.Spy(KM算法O(n^3)板子题)

    整理的算法模板合集: ACM模板 前面好几段又在讲故事- 题目大意: a[i]表示对手的每个队伍战斗力 p[i]表示打败对手后获得的分数 b[i]表示我方第一种人的战斗力 c[i]表示我方第二种人的战 ...

  3. 2019 ICPC Asia Nanjing Regional I. Space Station题解

    文章目录 [题目链接] [前言] [题目大意] [解题思路] 一.优先暴力 二.记忆化 三.unordered_map以及思维优化 四.乘法逆元(拓展内容) [后记] [题目链接] https://n ...

  4. 2019 ICPC Asia Nanjing Regional C.Digital Path(拓扑排序递推DP)

    整理的算法模板合集: ACM模板 题目传送门 三段题面,只有第三段是有用的-前两段又长单词又难懂,就是在讲故事...不过针对四种情况给出四个图帮助我们理解题意是真的赞,可能出题人怕我们看不懂吧(第一句 ...

  5. 2019 ICPC Asia Nanjing Regional K.Triangle(求一个能将三角形分成两个面积相同的线段、计算几何)

    整理的算法模板合集: ACM模板 题目传送门 用板子判断点是否在线段上即可.紫书的板子有点问题,判断是否在线段上的时候应该是<=才能A,书上是 < - 对于第二问我们先特判一下特殊的情况, ...

  6. 2019 ICPC Asia Nanjing Regional

    题号 题目 难度 知识点 A A Hard Problem 签到题 思维题 B Chessboard C Digital Path 签到题 dfs+记忆化搜索 D Holes E Observatio ...

  7. Gym - 101981G The 2018 ICPC Asia Nanjing Regional Contest G.Pyramid 找规律

    数一个n阶三角形中,有多少个全等三角形,n<=1e9 拿到题想找规律,手画开始一直数漏....,最后还是打了个表 (打表就是随便定个点为(0,0),然后(2,0),(4,0),(6,0),(1, ...

  8. 2018-2019 ACM-ICPC, Asia Nanjing Regional Contest题解

    以下所有AC题解程序来自"仙客传奇"团队. AC题数:6/13 ADGIJK A. Adrien and Austin AC的C++语言程序: #include <iostr ...

  9. 2019 ICPC Asia Yinchuan Regional(9 / 13)

    2019 ICPC Asia Yinchuan Regional A - Girls Band Party(分组背包) 每个物品有两个标签,名字,颜色,当名字是设置为奖赏时会对整体加上0.1 的贡献, ...

最新文章

  1. CountDownTimer的简单使用
  2. MySQL-CentOS7通过YUM安装MySQL5.7.29
  3. linux内核5.4,Linux Kernel 5.4 RC8 发布,一切都很正常
  4. SQL中及Access的空值
  5. c语言每轮for循环初始化i,十三.Linux博客-2016年8月18日while、for特殊用法、selet循环与菜单、函数...
  6. python编程中条件句_简单讲解Python编程中namedtuple类的用法
  7. oracle查询用户权限和角色_详解jenkins配置用户角色权限的实现方法
  8. php显示图片缩略图,使用ThinkPHP生成缩略图及显示的方法
  9. 15款值得开发者一试的最新的前端框架
  10. 视觉SLAM十四讲第五讲
  11. java 生成拼音_java 根据汉字生成拼音全拼或拼音首字母
  12. cmake find_package 原理简介以及使用说明
  13. hdu 5211 Mutiple
  14. python如何计算平均分_python脚本如何输入成绩求平均分?
  15. oracle 高级查询
  16. 粉末成型工艺(粉末冶金粉末注射成型)
  17. 计算机系统软件和应用软件的区别
  18. 网络核心之分组交换与电路交换
  19. 如何用A4纸排版打印并制作成四分之一大小的册子(简易说明书)
  20. 马上消费首份报告曝光,聚焦6大方向践行社会责任

热门文章

  1. python中strip函数和split函数
  2. libcurl 库的编译
  3. 类中无错误显示,但类名出线红色波浪线
  4. wps 根据单元格值 设置单元格所在行 颜色(大于0 行红色 小于0 行xx色)
  5. 江苏省计算机等级考试理论试题,2015江苏省计算机等级考试试题 二级ACCESS理论考试试题及答案...
  6. 软件工程管理集成了过程管理和项目管理
  7. mac桌面壁纸_在Mac上从命令行设置桌面墙纸
  8. html做一个简单的网易邮箱注册
  9. web太极八卦图纯css
  10. 容斥原理 —— 求1~n有多少个数与k互质(二进制算法详细解释模板)