网上训练补题

1.Codeforces Round 920 (Div. 3)

 A.

 简单判断出边长即可

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{int n;scanf("%d", &n);while (n--){int x, y;scanf("%d%d", &x, &y);int e, f;scanf("%d%d", &e, &f);int g, h;scanf("%d%d", &g, &h);int a, b;scanf("%d%d", &a, &b);int line = 0;int wine = 0;line = sqrt((x - e) * (x - e) + (y - f) * (y - f));wine = sqrt((x - g) * (x - g) + (y - h) * (y - h));if (line < wine){printf("%d\n", line * line);}else{printf("%d\n", wine * wine);}}return 0;
}

B.

 按顺序比较字符串即可

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
char a[100050] = { 0 };
char b[100050] = { 0 };
int main()
{int t;scanf("%d", &t);while (t--){int n;scanf("%d", &n);scanf("%s", a);scanf("%s", b);int ze = 0;int li = 0;int num = 0;for (int i = 0; i < n; i++){if (a[i] == '1' && a[i] != b[i]){li++;}else if (a[i] == '0' && a[i] != b[i]){ze++;}}if (li == ze){num = li;}else{if (li > ze){num = li;}else{num = ze;}}printf("%d\n", num);memset(a, 0, sizeof(char) * 100050);memset(b, 0, sizeof(char) * 100050);}return 0;
}

C.

 每次的耗电量相比后直接相减即可

#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>inline void fastRead(long long &x) {int c = getchar();int sign = 1;while (c < '0' || c > '9') {if (c == '-') sign = -1;c = getchar();}x = 0;while (c >= '0' && c <= '9') {x = x * 10 + c - '0';c = getchar();}x *= sign;
}long long arr[200050] = { 0 };int main() {long long t;fastRead(t);while (t--) {long long n, f, a, b;int flag = 1;fastRead(n); fastRead(f); fastRead(a); fastRead(b);for (int i = 0; i < n; i++) {fastRead(arr[i]);}long long mid = 0;for (int i = 0; i < n; i++) {mid = (i == 0 ? arr[i] : arr[i] - arr[i - 1]) * a;f -= (mid < b ? mid : b);if (f <= 0) {printf("NO\n");flag = 0;break;}}if (flag == 1) {printf("YES\n");}}return 0;
}

D.

反复比较两个数列头尾相减的最大值即可

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int a[200005] = { 0 };
int b[200005] = { 0 };
int com(const void* a, const void* b)
{int aa = *(const int*)a;int bb = *(const int*)b;if (aa > bb){return 1;}else if (aa < bb){return -1;}else{return 0;}
}
void solve()
{int n, m;scanf("%d%d", &n, &m);for (int i = 0; i < n; i++){scanf("%d", &a[i]);}for (int i = 0; i < m; i++){scanf("%d", &b[i]);}qsort(a, n, sizeof(int), com);qsort(b, m, sizeof(int), com);long long num = 0;int mm = m - 1;int nn = n - 1;int mi = 0;int ni = 0;int count = 0;while (count < n){if (abs(b[mm] - a[ni]) >= abs(a[nn] - b[mi])){num += abs(b[mm] - a[ni]);count++;ni++;mm--;}else{num += abs(a[nn] - b[mi]);mi++;nn--;count++;}}printf("%lld\n", num);
}
int main()
{int t;scanf("%d", &t);while (t--){solve();}return 0;
}

 E.

 博弈论,初始位置就决定了谁是试图平局的那一方

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>void solve()
{int h, w, x1, y1, x2, y2;scanf("%d%d%d%d%d%d", &h, &w, &x1, &y1, &x2, &y2);if (h == 1 || x1 > x2){printf("Draw\n");}else{if (abs(x1 - x2) % 2 == 0)//bob主场{if (y1 > y2){if (2 * (w - y2) > x2 - x1){printf("Draw\n");}else{printf("Bob\n");}}else if (y1 < y2){if (2 * (y2 - 1) > x2 - x1){printf("Draw\n");}else{printf("Bob\n");}}else{printf("Bob\n");}}else if (abs(x1 - x2) % 2 != 0)//alice主场{if (y1 > y2){if (y1 - y2 == 1){printf("Alice\n");}else if (2 * (y1 - 2) >= x2-x1){printf("Draw\n");}else{printf("Alice\n");}}else if (y1 < y2){if (y2 - y1 == 1){printf("Alice\n");}else if (2 * (w - y1 - 1) >= x2 - x1){printf("Draw\n");}else{printf("Alice\n");}}else{printf("Alice\n");}}}
}
int main()
{int t;scanf("%d", &t);while (t--){solve();}return 0;
}

2.Toyota Programming Contest 2024#1(AtCoder Beginner Contest 337)

虚拟参加

A. 简单相加比较大小

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>int main()
{int t;scanf("%d", &t);long long a = 0;long long b = 0;while (t--){int aa;int bb;scanf("%d%d", &aa, &bb);a += aa;b += bb;}if (a > b){printf("Takahashi\n");}else if (b > a){printf("Aoki\n");}else{printf("Draw\n");}return 0;
}

B.

要注意单个B也可以是正确的

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
char s[1005];
int main() 
{scanf("%s", s);int i = 0;int len = strlen(s);//检查awhile (i < len && s[i] == 'A') {i++;}//检查bwhile (i < len && s[i] == 'B') {i++;}//检查cwhile (i < len && s[i] == 'C') {i++;}if (i == len) {printf("Yes\n");}else {printf("No\n");}return 0;
}

C.

利用head找到最开始的那个人,然后next数组依次输出

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>#define MAXN 300005int next[MAXN]; // 每个人后面的人
int prev[MAXN]; // 每个人前面的人
int head; // 第一个人int main() 
{int n;scanf("%d", &n);for (int i = 1; i <= n; i++) {int a;scanf("%d", &a);if (a == -1) {head = i;}else {next[a] = i;prev[a] = a;}}// 从第一个人开始,依次打印每个人的编号for (int i = head; i != 0; i = next[i]) {printf("%d ", i);}return 0;
}

 D.

前缀和的思想会容易解决这一个问题,全部统计完直接遍历即可

这里最好用c++的容器,因为这个不能硬开数组,会过大,我写一个丑陋的一维数组来模拟的

#include <stdio.h>
#include <string.h>
#include <math.h>
char m[20000050] = { 0 };
int a[20000050] = { 0 };
int b[20000050] = { 0 };
void solve()
{int h, w, k;scanf("%d%d%d", &h, &w, &k);for (int i = 1; i <= h; i++){for (int j = 1; j <= w; j++){scanf(" %c", &m[i * w + j]);}}for (int i = 1; i <= h; i++) {for (int j = 1; j <= w; j++) {a[i * w + j] = a[w * (i - 1) + j] + a[i * w + j - 1] - a[w * (i - 1) + (j - 1)] + (m[i * w + j] == '.');b[i * w + j] = b[w * (i - 1) + j] + b[i * w + j - 1] - b[w * (i - 1) + (j - 1)] + (m[i * w + j] == 'x');}}long long ans = 0x3f3f3f3f;for (int i = 1; i <= h; i++){for (int j = k; j <= w; j++){int flag = b[i * w + j] - b[i * w + j - k] - b[w * (i - 1) + j] + b[w * (i - 1) + j - k];if (flag == 0){if (ans > (a[i * w + j] - a[i * w + j - k] - a[w * (i - 1) + j] + a[w * (i - 1) + j - k])){ans = a[i * w + j] - a[i * w + j - k] - a[w * (i - 1) + j] + a[w * (i - 1) + j - k];}}}}for (int i = k; i <= h; i++){for (int j = 1; j <= w; j++){int flag = b[i * w + j] - b[w * (i - k) + j] - b[i * w + j - 1] + b[w * (i - k) + j - 1];if (flag == 0){if (ans > (a[i * w + j] - a[w * (i - k) + j] - a[i * w - 1 + j] + a[w * (i - 1) + j - 1])){ans = a[i * w + j] - a[w * (i - k) + j] - a[i * w - 1 + j] + a[w * (i - 1) + j - 1];}}}}if (ans == 0x3f3f3f3f){printf("-1\n");}else{if (ans > 0){printf("%lld\n", ans);}else{printf("0\n");}}
}
int main()
{solve();return 0;
}

E.

 感谢学长的代码和讨论区大佬的提示,这是对二进制的理解,以便在一轮问话中确定坏的饮料是什么

代码附上详细的注释

#include <stdio.h>
#include <math.h>
#include <string.h>int main() 
{int n;scanf("%d", &n); // 读取果汁的数量int m = ceil(log2(n)); // 计算出需要的测试组的数量,这个数量是n的二进制表示的位数printf("%d\n", m); // 打印测试组的数量int test_groups[m][n]; // 创建一个二维数组,用来存储每个测试组的果汁编号 m是人数 n是每个人分别问的数量memset(test_groups, 0, sizeof(test_groups)); // 初始化二维数组int test_group_sizes[m]; // 创建一个数组,用来存储每个测试组的果汁数量memset(test_group_sizes, 0, sizeof(test_group_sizes)); // 初始化数组for (int i = 0; i < n; i++) { // 遍历每个果汁的编号for (int j = 0; j < m; j++) // m是二进制位的位数{ // 对于每个编号,检查它的二进制表示的每一位if ((i >> j) & 1) { // 如果某一位是1test_groups[j][test_group_sizes[j]] = i + 1; // 就将这个编号加入到对应的测试组中test_group_sizes[j]++;//问的数量}}}for (int i = 0; i < m; i++) { // 打印出每个测试组的果汁数量和编号printf("%d ", test_group_sizes[i]);for (int j = 0; j < test_group_sizes[i]; j++) {printf("%d ", test_groups[i][j]);}printf("\n");fflush(stdout); // 清空输出缓冲区,确保信息立即输出}char test_results[m + 1]; // 创建一个数组,用来存储每个测试组的测试结果scanf("%s", test_results); // 读取每个测试组的测试结果int bad_drink = 0; // 初始化变质的果汁的编号for (int i = 0; i < m; i++) { // 遍历每个测试组的测试结果if (test_results[i] == '1') { // 如果某个测试组的测试结果是1bad_drink |= (1 << i); // 那么变质的果汁的编号在二进制表示下的对应位设置为1}}printf("%d\n", bad_drink + 1); // 打印出变质的果汁的编号return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/421387.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL 注入总结(详细)

一、前言 这篇文章是最近学习 SQL 注入后的笔记&#xff0c;里面整理了 SQL 常见的注入方式&#xff0c;供大家学习了解 SQL 注入的原理及方法&#xff0c;也方便后续自己回顾&#xff0c;如有什么错误的地方欢迎指出&#xff01; 二、判断注入类型 按照注入点类型分类 数字型…

【Coding】寒假每日一题Day.5. 互质数的个数

题目来源 题目来自于AcWing平台&#xff1a;https://www.acwing.com/problem/content/4971/ 以blog的形式记录程序设计算法学习的过程&#xff0c;仅做学习记录之用。 题目描述 输入输出格式与数据范围 样例 第一组&#xff1a; 2 516第二组&#xff1a; 12 711943936思路…

SpringMVC(八)处理AJAX请求

一、处理AJAX之准备工作: 首先我们创建一个新的工程: 我们将pom.xml复制过来: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-in…

Excel乱码?教你3个简单解决方法!

“我在编辑一个文件时&#xff0c;Excel突然就乱码了&#xff0c;怎么会这样呢&#xff1f;这个文件对我来说是比较重要的&#xff01;有什么方法可以快速解决吗&#xff1f;” 在处理Excel文件时&#xff0c;我们有时会遇到乱码问题。乱码不仅影响数据的可读性&#xff0c;还可…

华清远见作业第三十一天——网络编程(第六天)

思维导图&#xff1a; 代码&#xff1a; 服务器&#xff1a; #include<stdio.h> #include<string.h> #include<stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <a.h> #define SER_PORT 10000 #define login 1 //登录…

《WebKit 技术内幕》之七(4): 渲染基础

4 WebKit软件渲染技术 4.1 软件渲染过程 在很多情况下&#xff0c;也就是没有那些需要硬件加速内容的时候&#xff08;包括但不限于CSS3 3D变形、CSS3 03D变换、WebGL和视频&#xff09;&#xff0c;WebKit可以使用软件渲染技术来完成页面的绘制工作&#xff08;除非读者强行…

【Redis】Redis如何实现key的过期删除

​ &#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;Redis ⛳️ 功不唐捐&#xff0c;玉汝于成 ​ 目录 前言 正文 结语 我的其他博客 前言 在当今信息时代&#xff0c;数据的快速存储和高效检索成为了软件系统设计中的核心需求。Redis作为…

为什么PostgreSQL如此受追捧?

今天在群里看到一张图&#xff0c; 题目叫为什么PostgreSQL如此受追捧&#xff1f;列举了PG的7大特性&#xff0c;感觉很有意思&#xff0c;实际上在中国PG并没有Mysql流行&#xff0c;但是mysql被oracle收购之后&#xff0c;大家对mysql的发展前景不免有些担心&#xff0c;但是…

golang学习笔记——http.Handle和http.HandleFunc的区别与type func巧妙运用

文章目录 http.Handle和http.HandleFunc的区别http.Handle分析type func巧妙运用 http.HandleFunc分析总结参考资料 http.Handle和http.HandleFunc的区别 http.Handle和http.HandleFunc的区别体现了Go语言接口的巧妙运用 下面代码启动了一个 http 服务器&#xff0c;监听 808…

系统引导器GRUB

全称为GNU GRUB&#xff0c;来自GNU计划的多操作系统引导器。 作用&#xff1a; 查看引导分区内容 ls /boot ls /boot/grub2/ 查看GRUB2的配置文件 cat /boot/grub2/grub.cfg 可以看到/boot中保存的文件主要是linux内核、内存映像文件等。 注意到是子用户&#xff0c;但在…

【RabbitMQ】RabbitMQ面试热点

使用RabbitMQ有什么好处&#xff1f; 异步处理 解耦 流量削峰 RabbitMQ 结构&#xff08;如何发送消息&#xff1f;&#xff09; 整体结构如下图所示&#xff1a; 结构介绍 Server&#xff1a;又称为broker&#xff0c;接受客户端连接&#xff0c;RabbitMQ 节点&#xff1b…

华南理工大学数字信号处理实验实验二源码(薛y老师)

一、实验目的 ▪ 综合运用数字信号处理的理论知识进行信号分析并利用MATLAB作为编程工具进行计算机实现&#xff0c;从而加 深对所学知识的理解&#xff0c;建立概念。 ▪ 掌握数字信号处理的基本概念、基本理论和基本方法。 ▪ 学会用MATLAB对信号进行分析和处理。 ▪ 用F…