A. 检测点查询

题意

求 n n n个点中距离关键点最近的三个点。
若距离相同,则取编号小的。
3 ≤ n ≤ 200 , 0 ≤ ∣ x ∣ , ∣ y ∣ ≤ 200 3\le n\le 200,0\le|x|,|y|\le200 3≤n≤200,0≤∣x∣,∣y∣≤200

题解

分别记录最小值,次小值,第三小值即可。
时间复杂度 O ( n ) O(n) O(n)

#include <bits/stdc++.h>
#define sqr(x) ((x) * (x))
using namespace std;
typedef pair<int, int> Pii;
int n;
struct Point { int x, y; } p, q;
Pii m1 = {INT32_MAX, 0}, m2 = m1, m3 = m1;
inline int dis2(Point a, Point b) { return sqr(a.x - b.x) + sqr(a.y - b.y); }
inline void Ins(Pii x) {if (x < m1) m3 = m2, m2 = m1, m1 = x;else if (x < m2) m3 = m2, m2 = x;else if (x < m3) m3 = x;
}
int main() {scanf("%d%d%d", &n, &q.x, &q.y);for (int i = 1; i <= n; ++i)scanf("%d%d", &p.x, &p.y), Ins({dis2(p, q), i});printf("%d\n%d\n%d", m1.second, m2.second, m3.second);return 0;
}

B. 风险人群筛查

题意

给定一个矩形左下角和右上角的坐标。
有 n n n个人,给定这 n n n个人在 1 ∼ t 1\sim t 1∼t时刻的坐标。
求有多少人某时刻在出现矩形内;求有多少人至少连续 k k k个时刻在矩形内(边界也算)。
1 ≤ n ≤ 20 , 1 ≤ k ≤ t ≤ 1 0 3 1\le n\le20,1\le k\le t\le10^3 1≤n≤20,1≤k≤t≤103

题解

第一问直接判断;第二问判断每个人在矩形内的最长连续时间是否大于等于 k k k即可。
时间复杂度 O ( n t ) O(nt) O(nt)

#include <bits/stdc++.h>
using namespace std;
int n, k, t, Ans1, Ans2;
struct Point {int x, y;inline void init() { scanf("%d%d", &x, &y); }inline bool operator<=(const Point b) { return x <= b.x && y <= b.y; }
} LD, RU, p;
int main() {scanf("%d%d%d", &n, &k, &t);LD.init(), RU.init();while (n--) {int flag = 0, maxL = 0, L = 0;for (int i = 1; i <= t; ++i) {p.init();if (LD <= p && p <= RU)flag = 1, ++L;elsemaxL = max(maxL, L), L = 0;}maxL = max(maxL, L);Ans1 += flag, Ans2 += maxL >= k;}printf("%d\n%d", Ans1, Ans2);return 0;
}

C. 点亮数字人生

题意

给定一个包含 n n n个节点的逻辑电路,每个节点有一个算符( N O T , X O R , A N D , O R , N A N D , N O R \rm NOT,XOR,AND,OR,NAND,NOR NOT,XOR,AND,OR,NAND,NOR),共有 m m m个输入端,每个节点至多有 k k k个输入源。
S S S组询问,给定所有 m m m个输入源的输入值 0 / 1 0/1 0/1和 s o s_o so​个节点的编号 s 1 , s 2 , . . . , s s o s_1,s_2,...,s_{s_o} s1​,s2​,...,sso​​。
若逻辑电路存在环,则输出 L O O P \rm LOOP LOOP;否则对于每组询问,求出节点 s 1 , s 2 , . . . , s s o s_1,s_2,...,s_{s_o} s1​,s2​,...,sso​​的结果。
Q Q Q组数据。
Q ≤ 5 , n ≤ 500 , k ≤ 5 , m ≤ k n , S ≤ 1 0 4 Q\le5,n\le500,k\le5,m\le kn,S\le10^4 Q≤5,n≤500,k≤5,m≤kn,S≤104
样例一对应的逻辑电路:

题解

根据输入的关系建立出相应的有向图(所有的输入源也当成一个点),利用拓扑排序直接求解即可。
时间复杂度 O ( Q S ( n + m ) ) O(QS(n+m)) O(QS(n+m))

#include <bits/stdc++.h>
using namespace std;
const int N = 3000 + 5;
typedef int arr[N];
int n, m, S, Cnt, Loop;
arr in, deg, op, Ans, s_;
vector<int> G[N], input[N];
vector<int> I_[10005];
inline int f(vector<int> input, int op) {int y = 0;if (!op) return !input[0]; // NOTelse if (op == 1) {   // XORfor (auto x : input)y ^= x;return y;} else if ((op | 1) == 3) { // AND,NANDy = input[0];for (int i = 1; i < (int)input.size(); ++i)y &= input[i];return op & 1 ? !y : y;} else { // OR,NORfor (auto x : input)y |= x;return op & 1 ? !y : y;}
}
inline void Topsort() {if (Loop == 1)return;queue<int> q;for (int i = 1; i <= n; ++i)deg[i] = in[i], input[i].clear();for (int i = n + 1; i <= n + m; ++i)q.push(i);while (!q.empty()) {int u = q.front();q.pop();for (auto v : G[u]) {input[v].push_back(Ans[u]);if (!(--deg[v]))Ans[v] = f(input[v], op[v]), q.push(v);}}if (Loop == -1) {for (int i = 1; i <= n; ++i)if (deg[i])return (void)(Loop = 1, puts("LOOP"));Loop = 0;}for (int i = 1; i <= Cnt; ++i)printf("%d%c", Ans[s_[i]], " \n"[i == Cnt]);
}
inline int GetOP(char *s) {if (s[0] == 'O') return 4;if (s[0] == 'X') return 1;if (s[0] == 'A') return 2;if (s[1] == 'A') return 3;if (s[2] == 'T') return 0;return 5;
}
inline void Solve() {for (int i = 1; i <= n + m; ++i)in[i] = 0, G[i].clear();for (int i = 1; i <= n; ++i) {char s[5];int u;scanf("%s%d", s, &in[i]);op[i] = GetOP(s);for (int j = 1; j <= in[i]; ++j) {scanf("%s", s);if (s[0] == 'O')sscanf(s, "O%d", &u), G[u].push_back(i);elsesscanf(s, "I%d", &u), G[n + u].push_back(i);}}Loop = -1;scanf("%d", &S);for (int i = 1; i <= S; ++i) {I_[i].resize(m);for (int j = 0; j < m; ++j)scanf("%d", &I_[i][j]);}for (int i = 1; i <= S; ++i) {for (int j = n + 1; j <= n + m; ++j)Ans[j] = I_[i][j - n - 1];scanf("%d", &Cnt);for (int j = 1; j <= Cnt; ++j)scanf("%d", s_ + j);Topsort();}
}
int main() {scanf("%*d");while (~scanf("%d%d", &m, &n))Solve();return 0;
}

D. 星际旅行

题意

给定一个半径为 r r r的 n n n维球体和 m m m个 n n n维点。
求每个点到剩下 m − 1 m-1 m−1个点的不穿过球体的最短距离之和。
2 ≤ n ≤ 100 , 2 ≤ m ≤ 2000 , 1 ≤ r ≤ 1 0 3 , 0 ≤ ∣ x ∣ , ∣ y ∣ ≤ 1 0 3 2\le n\le100,2\le m\le2000,1\le r\le10^3,0\le |x|,|y|\le10^3 2≤n≤100,2≤m≤2000,1≤r≤103,0≤∣x∣,∣y∣≤103

题解

考虑二维的情况

其中
θ 1 = ∠ O A C = arcsin ⁡ r ∣ A O ∣ θ 2 = ∠ O B D = arcsin ⁡ r ∣ B O ∣ θ 3 = ∠ A O B = arccos ⁡ ∣ A O ∣ 2 + ∣ B O ∣ 2 − ∣ A B ∣ 2 2 ∣ A O ∣ ∣ B O ∣ θ 4 = ∠ C O D = θ 3 − ( π 2 − θ 1 ) − ( π 2 − θ 2 ) = θ 1 + θ 2 + θ 3 − π \begin{aligned} \theta_1&=\angle OAC=\arcsin\frac{r}{|AO|}\\ \theta_2&=\angle OBD=\arcsin\frac{r}{|BO|}\\ \theta_3&=\angle AOB=\arccos\frac{|AO|^2+|BO|^2-|AB|^2}{2|AO||BO|}\\ \theta_4&=\angle COD=\theta_3-(\frac{\pi}2-\theta_1)-(\frac{\pi}2-\theta_2)=\theta_1+\theta_2+\theta_3-\pi \end{aligned} θ1​θ2​θ3​θ4​​=∠OAC=arcsin∣AO∣r​=∠OBD=arcsin∣BO∣r​=∠AOB=arccos2∣AO∣∣BO∣∣AO∣2+∣BO∣2−∣AB∣2​=∠COD=θ3​−(2π​−θ1​)−(2π​−θ2​)=θ1​+θ2​+θ3​−π​

则 d i s ( A , B ) = A C ‾ + C D ⌢ + B D ‾ = ∣ A O ∣ 2 − r 2 + ∣ B O ∣ 2 − r 2 + r θ 4 dis(A,B)=\overline{AC}+\overset{\large\frown}{CD}+\overline{BD}=\sqrt{|AO|^2-r^2}+\sqrt{|BO|^2-r^2}+r\theta_4 dis(A,B)=AC+CD⌢+BD=∣AO∣2−r2 ​+∣BO∣2−r2 ​+rθ4​.
当线段 A B AB AB与圆不相交时,依照上式计算出来的 θ 4 < 0 \theta_4<0 θ4​<0,判断一下即可。
注意常数,时间复杂度 O ( n m 2 ) O(nm^2) O(nm2)

#include <bits/stdc++.h>
using namespace std;
const int N = 100 + 5, M = 2e3 + 5;
const double Pi = acos(-1);
int n, m, r, r2;
double dis[M][M];
struct Point {int a[N];inline void init() {for (int i = 1; i <= n; ++i)scanf("%d", a + i);}
} O, p[M];
#define sqr(x) ((x) * (x))
inline int Len(Point a, Point b) {int L = 0;for (int i = 1; i <= n; ++i)L += sqr(a.a[i] - b.a[i]);return L;
}
int main() {scanf("%d%d%d", &n, &m, &r);O.init();r2 = r * r;for (int i = 1; i <= m; ++i)p[i].init();for (int i = 1; i <= m; ++i)for (int j = i + 1; j <= m; ++j) {double AO2 = Len(p[i], O), BO2 = Len(p[j], O), AB2 = Len(p[i], p[j]),t1 = asin(r / sqrt(AO2)), t2 = asin(r / sqrt(BO2)),t3 = acos((AO2 + BO2 - AB2) / (2 * sqrt(AO2 * BO2))),t4 = t1 + t2 + t3 - Pi;if (t4 < 0)dis[i][j] = dis[j][i] = sqrt(AB2);elsedis[i][j] = dis[j][i] = sqrt(AO2 - r2) + sqrt(BO2 - r2) + r * t4;}for (int i = 1; i <= m; ++i)printf("%.10lf\n", accumulate(dis[i] + 1, dis[i] + m + 1, 0.0));return 0;
}

E. 密信与计数

简要题意

给你一个解码本和一堆单词。
求长度为k的密文:不包含单词为子串,且解密后的明文是由单词组成的。这样的字符串有多少种。

题解

大佬的口糊题解:

解码本一页很简单
n页就多记一维状态就好了
考虑一页的情况
先把字典翻译回去
得到不超过38个的密文串
对字典建ac自动机
对于ac自动机上每个节点
我们dp
如果走到终止节点就不转移

第二十次CCF计算机软件能力认证相关推荐

  1. 第二十次CCF计算机软件能力认证总结

    1.数据结构等资料没凑全 2.算法提前看一遍是对的 3.新系统可以看每个是怎么错的,最后才发现不应该了(提前看一遍就应该知道哪个是loop了) 4.一些数学类(几何,数论)的不会,指第四题最短曲线,知 ...

  2. 第十次CCF计算机软件能力认证

    第一题:分蛋糕 小明今天生日,他有 n 块蛋糕要分给朋友们吃,这 n 块蛋糕(编号为 1 到 n)的重量分别为 a1,a2,-,an. 小明想分给每个朋友至少重量为 k 的蛋糕. 小明的朋友们已经排好 ...

  3. 第二次CCF计算机软件能力认证

    做题感受: 410 / 500 前三道题目都比较简单,很快就能写完:T4 没想到超级源点,写了一个朴素BFS拿了90分:T5 不是很会,骗分拿了20分.总的来说T3相对较水,所以做的很顺. 一些需要注 ...

  4. ccf z字形 java_第三次CCF计算机软件能力认证题目:Z字形扫描

    这是第三次CCF计算机软件能力认证考试(2014年12月14日)的一道题目.小编今天有幸免费参加了这次考试.据说这题是谷歌的笔试题变形??求证实.. 好了,题外话不啰嗦,看题目 题目 在图像编码的算法 ...

  5. [ 2019-12-15第十八次CCF计算机软件能力认证]总结 Apare_xzc

    [ 2019-12-15第十八次CCF计算机软件能力认证]总结 导言:今天第一次参加CCF考试,考完回来迫不及待地想要做一点笔记 链接:我做的CCF题目汇总Apare_xzc <– 比赛题目(凭 ...

  6. CCF计算机软件能力认证202009-1称检测点查询(C语言版)

    ccf-csp计算机软件能力认证202009-1称检测点查询(C语言版) 题目内容: 题目背景 2020 年 6 月 8 日,国务院联防联控机制发布<关于加快推进新冠病毒核酸检测的实施意见> ...

  7. CCF计算机软件能力认证201809-2买菜(C语言版)

    ccf-csp计算机软件能力认证201809-2买菜(C语言版) 题目内容: 问题描述 小H和小W来到了一条街上,两人分开买菜,他们买菜的过程可以描述为,去店里买一些菜然后去旁边的一个广场把菜装上车, ...

  8. CCF计算机软件能力认证试题练习:201903-1 小中大

    小中大 来源:CCF 标签: 参考资料: 相似题目: 背景 在数据分析中,最小值最大值以及中位数是常用的统计信息. 题目 老师给了你 n 个整数组成的测量数据,保证有序(可能为升序或降序),可能存在重 ...

  9. CCF计算机软件能力认证试题练习:201803-2 碰撞的小球

    碰撞的小球 来源:CCF 标签: 参考资料: 相似题目: 题目 数轴上有一条长度为L(L为偶数)的线段,左端点在原点,右端点在坐标L处.有n个不计体积的小球在线段上,开始时所有的小球都处在偶数坐标上, ...

最新文章

  1. 联合南京大学,爱奇艺智能论文入选顶会CVPR 2021
  2. matplotlib绘制平滑的曲线
  3. MySpaces性能提高的过程(转)
  4. python flask 跨域问题 解决方法
  5. OVS bridgebundleport分析(三十四)
  6. 【数据展示】matplotlib子图设置子标题(subtitle for subplot)
  7. python简单数据类型变量_python-2-变量和简单数据类型
  8. 支付宝 RSA和RSA2签名算法区别
  9. QT编译项目错误:转换到coff期间失败文件无效或损坏
  10. 铁路联网售票系统 按计算机应用,铁路联网售票系统按计算机应用的分类它属于...
  11. 计算机课程设计红绿灯,labview红绿灯课程设计报告
  12. postman创建mockserver
  13. 使用IDA静态分析解密《舰娘Collection》的lua脚本
  14. 最近开发了一个向QQ好友自动发送消息的程序
  15. android 自定义柱形图简书,android 自定义网状图
  16. mbedtls | 10 - 数字证书及 X.509 证书标准
  17. list()与tolist()区别
  18. CCF201903-1小中大(C语言)
  19. geforce experience出现错误尝试重启PC
  20. linux五笔教程,RHEL6 64位操作系统安装极点五笔输法

热门文章

  1. mysql 删除一个约束条件_MySQL 字段增删改查 和 约束条件
  2. canvas(画布)
  3. 职场小故事分享(5)
  4. 好像还挺好玩的GAN重制版2——Keras搭建SRGAN平台进行图片超分辨率提升
  5. RocketMQ 消息编码格式
  6. Oracle全家桶(VirtualBox+OEL+Oracle11gR2)快捷搭建数据库服务器
  7. FFMpeg输出AAC
  8. 图的连通性,统计图的个数(L2-013 红色警报 (25 分))
  9. python输出间隔_python 生成特定间隔数列的方法
  10. 为Table中的thead加上边框