西电TIC带鱼杯新生训练赛复盘

news/2025/11/15 23:07:40/文章来源:https://www.cnblogs.com/Ahui2667d/p/19226483

传送门

A 最大子树和

P1122 最大子树和 - 洛谷

几天前看过一眼,大概知道思路,但是因为忘记ans可能取负而没有一次切掉

分析

  1. 题目要求一个节点带权的树的最大子树和

  2. 我们用 f [ i ]记录子树以节点 i 为根节点时的最大子树和,二维数组 a [ i ] [ j ] 记录节点 i 的第 j 条边所连接的节点

  3. 每次求一个 f [ i ] 时遍历到 i 相邻的节点 j 时,需要求以 j 为节点,且 j 与 i 不相邻的最大子树和,是明显的递归。

算法实现

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
int w[N];
vector<int>e[N];//动态?二维数组
int f[N];
long long  ans = -1e18;//美丽程度取值可能为负
void dfs(int now, int pre)//当前访问的节点 now 和上一次访问的节点 pre(即不能相邻的节点)
{f[now] = w[now];for (auto & nxt : e[now]){if ( nxt == pre)continue;dfs(nxt, now);f[now] += max(f[nxt], 0);}ans = max(ans, (long long)f[now]);
}
int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int n;cin >> n;for (int i = 1; i <= n; i++)cin >> w[i];for (int i = 1; i < n; i++){int a, b;cin >> a >> b;e[a].push_back(b);e[b].push_back(a);}dfs(1, -1);cout << ans;return 0;
}

Trick/错误总结

  1. 注意权可能为负数,因此ans初始化为极小值 -1e18

B 圆上的整点

P2508 [HAOI2008] 圆上的整点 - 洛谷

分析

  1. 问题等价于求 x2+y2=r^2的整数解(x,y)的个数——经典的丢番图方程

  2. 当r为奇素数,r=4K+1时有解,若4K+3无解

  3. x2+y2=(x-yi)(x+yi) :我们将问题转化为如何对r^2进行复数范围的因数分解...

  4. 将r^2的整数因数分为三类 2,4K+1,4K+3

  5. 现在考虑每一类因数对答案的贡献:

对于2类: 1(因为一定有 v2(x)=v2(y)=v2(r) )

对于4K+1类:(a+bi)和(a-bi) 分配到x2+y2=(x-yi)(x+yi)的第一二个因子的方法数是 v4k+1 ( r ^ 2 ) +1

对于4K+3类 :1(因为r^2是平方数)

  1. ans=上面的贡献数目相乘再乘4(因为x,y的正负)

代码分析

#include<bits/stdc++.h>
using namespace std;
int r;
long long ans = 1;
int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> r;for (int i = 2, cnt; i * i <= r; ++i)if (!(r % i)){cnt = 0;//vi(r) vi(r^2)=2vi(r)while (!(r % i))r /= i, cnt++;if (i % 4 == 1) ans *= 2 * cnt + 1;}if (r != 1 and r % 4 == 1) ans *= 3;cout << (ans *4);
}

Trick/错误总结

  1. 注意x,y的符号组合,不要忘记ans<<=2;

  2. 平方和转化为共轭复数乘积,然后计数(窝想不到qwq)

C 素数密度

P1835 素数密度 - 洛谷

分析

  1. L,R取值范围到2^31,肯定不能直接判断素数,甚至直接筛法也会TLE

  2. 注意到 [ L , R ] 区间长度范围1e6,也就是说,处于区间内的合数的素数因子最大不超过1e6,在1e6范围内所有的素数我们可以通过筛法求得

  3. 由2. 只需将[ L , R ] 中的所有合数进行标记,即可轻松求得区间内的素数个数

代码实现

#include<bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;bool H[N + 100], check[N];//素数筛标记合数,标记区间内的合数
map<int, bool> prime;//存储素数void doit()//筛法: 标记合数
{for (int i = 2; i <= N; i++){if (!H[i]){prime[i] = 1;for (long long j = (long long)i * i; j <= N; j += i)H[j] = 1;}}
}int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);long long l, r;cin >> l >> r;doit();for (auto &p : prime)//遍历所有在1e6以内的素数{long long base = p.first;long long d = max((l + base - 1) / base, (long long)2);//确保d*base>=L 取2是因为如果取1,可能会把base标记为合数while (d * base <= r){long long num = d * base;if (num >= l) check[num - l + 1] = 1; d++;}}int cnt = 0;for (long long i = l; i <= r; i++){if (i >= 2)//1不是素数,所以跳过cnt += !check[i - l + 1];}cout << cnt;return 0;
}

Trick/错误总结

  1. 标记区间内合数时,从max(2,上取整(L/p)) 开始,不要将p标记为合数

  2. 区间内计数时,需要留意L=1时,不要将1计数

  3. 反向思考问题:直接求[L,R]内的素数比较困难,但是求里面的合数却比较容易

D 神必大三角

P1355 神秘大三角 - 洛谷

分析

  1. 点是否在三角形的顶点上十分容易:只需挨个比较坐标即可

  2. 判断点是否在三角形内部,我们可以借助向量叉乘(求有向面积)

  1. 如图,当 fi 都同号时,点P在三角形内部

当 fi 中出现异号时,点P在三角形外部

当fi中出现零时,说明点P在三角形某一边所在的【直线】上,需要具体判断在三角形的边上还是在外部

  1. 若fi中出现零,另外两个f同号,那么p在边上;否则在三角外部

代码实现

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int x[4], y[4];char c;for (int i = 1; i <= 3; i++)cin >> c >> x[i] >> c >> y[i] >> c;
//
//	for (int i = 1; i <= 3; i++)
//		cout << x[i] << " " << y[i] << "\n";int a, b;cin >> c >> a >> c >> b >> c;for (int i = 1; i <= 3; i++)if (a == x[i] and b == y[i]){cout << 4;return 0;}int f[4];f[1] = (x[2] - a) * (y[3] - b) - (x[3] - a) * (y[2] - b);f[2] = (x[3] - a) * (y[1] - b) - (x[1] - a) * (y[3] - b);f[3] = (x[1] - a) * (y[2] - b) - (x[2] - a) * (y[1] - b);int cnt1 = 0, cnt2 = 0;//分别记录fi中正,负数的个数for (int i = 1; i <= 3; i++){if (f[i] < 0)cnt2++;else if (f[i] > 0)cnt1++;else{int f1 = 1, f2 = 1;for (int j = 1; j <= 3; j++)if (j != i)f1 *= (a - x[j]), f2 *= (b - y[j]);if (f1 <= 0 && f2 <= 0){cout << 3;return 0;}}}if (cnt1 == 3 or cnt2 == 3)cout << 1;elsecout << 2;return 0;
}

Trick/错误总结

  1. fi=0可能是P在三角形边上或者在三角形外部(在三角一边的直线上)

  2. 对整型变量比较比值时候转换成乘积的大小比较

E F G 送昏的

H 垃圾陷阱

P1156 垃圾陷阱 - 洛谷

分析

  1. 窝们容易想到按被投进井中的时间升序排列后暴力dfs, (然后TLE) dfs:O(2^100)

  2. 尝试剪枝 or 记忆化

  3. 剪枝:当ans1<a[pos-1].t,直接返回; (效果不大)

  4. 记忆化: 每次dfs的状态若已经经历过,那他不可能有解了,没必要再进行搜索

代码实现

#include<bits/stdc++.h>
using namespace std;struct node
{int t, f, h;
} a[110];int d, n, ans1 = 1e9, ans2 = 0;
bool dp[101000][110][110];//t 1e3 ;G 100 bool cmp1(node x, node y)
{return x.t < y.t;
}void dfs(int hp, int h, int pos)
{if (h >= d) //可以爬出{ans1 = min(ans1, a[pos - 1].t);return ;}if (pos > n or hp < a[pos].t) //垃圾吃完了 or 饿死{ans2 = max(ans2, hp);return ;}//记忆化: 如果hp h pos这个状态已经经历过,跳过if (dp[hp][h][pos])return;dp[hp][h][pos] = 1;dfs(hp, h + a[pos].h, pos + 1);//垫高dfs(hp + a[pos].f, h, pos + 1); //吃return ;
}int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> d >> n;for (int i = 1; i <= n; i++)cin >> a[i].t >> a[i].f >> a[i].h;sort(a + 1, a + 1 + n, cmp1);dfs(10, 0, 1); //HP height 垃圾编号if (ans1 == 1e9) cout << ans2;//没出去else cout << ans1;//出去了return 0;
}

Trick/错误总结

  1. f取值30 ,G取值100,故用来记录dfs(hp,h,pos)的数组dp[hp][h][pos]中hp要开大一些:3100足够

I KC喝咖啡

P1570 KC 喝咖啡 - 洛谷

分析

  1. 直觉说按照单位价值降序排列后取前m个 : 但是当我们用调整法稍作计算,就发现这不是充分的

  2. 困了,明天在更新剩下的()

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

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

相关文章

20251115 - 从零到1详细剖析STM32的CAN架构【以STM32F407为例】

从零到1详细剖析STM32的CAN架构【以STM32F407为例】 1 概览:bxCAN 在 STM32F407 中的位置与作用bxCAN(Basic extended CAN) 是 STM32F4 系列内部实现的 CAN 控制器硬件 IP,用来在物理 CAN 差分总线上收/发 CAN 帧(…

2025.11.15 测试

2025.11.15 测试改题 策略 7:10 顺序开题 T1 随便猜了个结论然后不小心过了大杨利,还好这种题我有经验,没有被吓到 7:49 写完 full_speed 说这个是模板快速读入 因为他写快读但没用,T 到 35pt。。。 T2 额,一眼数…

鸿蒙应用审核被拒?常见原因与避坑指南来了

一个个精心开发的应用,却总在审核关卡折戟,问题究竟出在哪里?鸿蒙生态正迎来前所未有的爆发期。数据显示,HarmonyOS 5 终端数已突破 2300 万,鸿蒙开发者数量超过 800 万,上架应用及元服务超过 3 万款。 在“鸿蒙…

C++篇(13)计算器实现 - 指南

C++篇(13)计算器实现 - 指南2025-11-15 22:58 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !importan…

20232306 2025-2026-1 《网络与系统攻防技术》实验五实验报告

1.实验要求 (1)从www.besti.edu.cn、baidu.com、sina.com.cn中选择一个DNS域名进行查询,获取如下信息: DNS注册人及联系方式 该域名对应IP地址 IP地址注册人及联系方式 IP地址所在国家、城市和具体地理位置 PS:使…

ABC432E sol

eazy ds problem. 题意 给你一个序列 $a$,需要支持单点加 & 全局求 $\max\left(l,\min(r,a_i)\right)$(也就是对于每个 $a_i$,当 $a_i<l$,造成 $l$ 的贡献;当 $a_i \ge r$ 时,造成 $r$ 的贡献;否则造成 …

完整教程:linux离线环境局域网远程ssh连接vscode

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025 CSP-S 趋势记

“去年 CSP-S 就没过初赛,今年呢?” 2025 CSP-S 寄。 T1 60min才发现可以反悔贪心,跑完大样例觉得是对的然后有个等号少判了就 100 -> 65。 T2 连正解都没想出来,只会 \(O(2^k \times (m + nk) + (m + nk) \log…

鲜花:记梦4

“你考虑得怎么样了?” 对面的声音打断了我的思考。我抬头一看,居然是,她。 我竭力克制住我的情绪变化,把悸动深深藏在了心底。 她递给我一个信封:“如果考虑好了的话,就在里面的合同上签字吧。”我连忙伸手去接…

第26天(简单题中等题 二分查找、贪心算法)

打卡第二十六天 1道简单题+2道中等题题目:思路: 贪心+二分查找,维护一个"潜在的最优递增序列集合",让每个长度的递增子序列的末尾元素尽可能小,从而为后续元素提供更多的增长可能性。代码: class Solution…

invalid literal for int() with base 10: abc中的base 10是什么意思? 另外它是怎么知道abc的?

在 Python 错误信息 invalid literal for int() with base 10: abc 中,涉及两个关键问题:base 10 的含义,以及程序如何知道错误输入是 abc。下面分别详细解释: 一、base 10 是什么意思? base 在这里表示“进制”,…

byd秘钥 - MKT

byd秘钥 https://rcorex.github.io/nuttyb-config/

NSubstitute之Substitute.ForT

_currentUser = Substitute.For<ICurrentUser>(); 这是 NSubstitute(一个 .NET 单元测试 mock 框架)中的标准用法,用来“创建一个假的 ICurrentUser 实例”。 下面详细解释它的逻辑。✅ 到底发生了什么? Sub…

DAY1 JAVA PreLearning

day1 markdown leaning font 1.set the title: # title---first class subject,## title---second class subject and so on 2.set the text to bold: text 3.set the text to italic: text 4.perform like deleting …

动态规划实践:数字三角形问题分析

动态规划实践:数字三角形问题分析数字三角形的动态规划分析 按照动态规划的求解步骤,我们一步步拆解这个问题: 1.1 最优子结构与递推方程式 首先明确状态定义:设 dp[i][j]表示从数字三角形顶部(第0行第0列)走到第…

【服务器】服务器被攻击植入了挖矿病毒,CPU一直占用100%,@monthly /root/.cfg/./dealer病毒清除 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

第4章 AI项目管理新范式:从交付功能到交付价值

第4章 AI项目管理新范式:从交付功能到交付价值前文系统剖析了传统项目管理范式在AI场景下的局限性。面对这些系统性挑战,简单的“修补”已无济于事,我们必须进行管理范式的“重构”。本章正式提出AI项目管理的新范式…

牛客101:链表 - 教程

牛客101:链表 - 教程2025-11-15 22:39 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-…

C++ QT_数据转换(数值、QString、QByteArray、结构体)

目录1. 基础类型互转数值 ↔ QStringbool ↔ QStringQString 与 QByteArray 互转结构体与 QByteArray 互转 1. 基础类型互转 数值 ↔ QString//int → QStringint intVal = 255; QString strInt1 = QString::number(i…