当前位置: 首页 > web >正文

【每日一题 | 2025年5.5 ~ 5.11】搜索相关题

在这里插入图片描述

个人主页:Guiat
归属专栏:每日一题

在这里插入图片描述

文章目录

  • 1. 【5.5】P3717 [AHOI2017初中组] cover
  • 2. 【5.6】P1897 电梯里的尴尬
  • 3. 【5.7】P2689 东南西北
  • 4. 【5.8】P1145 约瑟夫
  • 5. 【5.9】P1088 [NOIP 2004 普及组] 火星人
  • 6. 【5.10】P1164 小A点菜
  • 7. 【5.11】P1019 [NOIP 2000 提高组] 单词接龙

正文

1. 【5.5】P3717 [AHOI2017初中组] cover

题目链接:https://www.luogu.com.cn/problem/P3717

【分析】
暴力搜索 + 两点距离公式,时间复杂度:O(m * n ^ 2)。

【AC_Code】

#include <iostream>
#include <cmath>
#define IOS ios :: sync_with_stdio(0); cin.tie(0); cout.tie(0);using namespace std;bool vis[105][105]; int ans;void solve()
{int n, m, r; cin >> n >> m >> r;while (m --){int x, y; cin >> x >> y;for (int i = 1; i <= n; i ++) for (int j = 1; j <= n; j ++){double dis = sqrt(pow((i - x), 2) + pow((j - y), 2));if (dis <= r) vis[i][j] = true;}}for (int i = 1; i <= n; i ++) for (int j = 1; j <= n; j ++) if (vis[i][j]) ans ++;cout << ans << '\n';
}int main()
{IOS int _ = 1;   // cin >> _;while (_ --) solve();return 0;
}

2. 【5.6】P1897 电梯里的尴尬

题目链接:https://www.luogu.com.cn/problem/P1897

【分析】

先读懂题目样例,之后按题意模拟即可,具体看代码。

在这里插入图片描述
在这里插入图片描述

【AC_Code】

#include <iostream>
#include <algorithm>
#define IOS ios :: sync_with_stdio(0); cin.tie(0); cout.tie(0);using namespace std;const int N = 1e5 + 10; int a[N], now, ans;void solve()
{int n; cin >> n; for (int i = 0; i < n; i ++) cin >> a[i];sort(a, a + n);for (int i = 0; i < n; ){int tar = a[i];if (tar > now) ans += (tar - now) * 6;else if (tar < now) ans += (now - tar) * 4;int cnt = 0;while (i < n && a[i] == tar) cnt ++, i ++;ans += 5; ans += cnt; now = tar;} ans += now * 4;cout << ans << '\n';
}int main()
{IOS int _ = 1;   // cin >> _;while (_ --) solve();return 0;
}

3. 【5.7】P2689 东南西北

题目链接:https://www.luogu.com.cn/problem/P2689

【分析】
按题意模拟即可,注意逻辑,属于简单题。

【AC_Code】

#include <iostream>
#define IOS ios :: sync_with_stdio(0); cin.tie(0); cout.tie(0);using namespace std;int ans;void solve()
{int x1, y1, x2, y2, T; cin >> x1 >> y1 >> x2 >> y2 >> T;while (T --){char c; cin >> c;if (c == 'N' && y1 < y2) y1 ++, ans ++;else if (c == 'S' && y1 > y2) y1 --, ans ++;else if (c == 'W' && x1 > x2) x1 --, ans ++;else if (c == 'E' && x1 < x2) x1 ++, ans ++;if (x1 == x2 && y1 == y2) { cout << ans << '\n'; return ; }}cout << -1 << '\n';
}int main()
{IOS int _ = 1;   // cin >> _;while (_ --) solve();return 0;
}

4. 【5.8】P1145 约瑟夫

题目链接:https://www.luogu.com.cn/problem/P1145

【分析】

在这里插入图片描述
pos(删除位置)
4 = (0 + 4) % (2 * 3 - 0)
3 = (4 + 4) % (2 * 3 - 1)
3 = (3 + 4) % (2 * 3 - 2)
=> pos = (pos + m - 1) % (2 * k - i)

【AC_Code】

#include <iostream>
#define IOS ios :: sync_with_stdio(0); cin.tie(0); cout.tie(0);using namespace std;void solve()
{int k; cin >> k; int m = k + 1;while (1){int pos = 0; bool flag = true;for (int i = 0; i < k; i ++){pos = (pos + m - 1) % (2 * k - i);if (pos < k) { flag = false; break; }}if (flag) { cout << m << '\n'; return ; }m ++;}
}int main()
{IOS int _ = 1;   // cin >> _;while (_ --) solve();return 0;
}

5. 【5.9】P1088 [NOIP 2004 普及组] 火星人

题目链接:https://www.luogu.com.cn/problem/P1088

【分析】
相当于一个全排列模版:求输入的整数序列进行 m 次字典序下一个排列的变换。

【AC_Code】

#include <iostream>
#include <algorithm>
#define IOS ios :: sync_with_stdio(0); cin.tie(0); cout.tie(0);using namespace std;const int N = 1e4 + 10; int a[N];void solve()
{int n, m; cin >> n >> m;for (int i = 0; i < n; i ++) cin >> a[i];for (int i = 0; i < m; i ++) next_permutation(a, a + n);for (int i = 0; i < n; i ++) cout << a[i] << ' '; cout << '\n';
}int main()
{IOS int _ = 1;   // cin >> _;while (_ --) solve();return 0;
}

6. 【5.10】P1164 小A点菜

题目链接:https://www.luogu.com.cn/problem/P1164

【分析】
01背包的变种,构建二维dp矩阵,f[i][j]表示前i个菜品恰好花费j元的方案数,二维可以优化到一维,这里采用二维解法。

【AC_Code】

#include <iostream>
#define IOS ios :: sync_with_stdio(0); cin.tie(0); cout.tie(0);using namespace std;int a[110], f[110][10010];void solve()
{int n, m; cin >> n >> m; for (int i = 1; i <= n; i ++) cin >> a[i];for (int i = 0; i <= n; i ++) f[i][0] = 1;for (int i = 1; i <= n; i ++) for (int j = 1; j <= m; j ++){f[i][j] += f[i - 1][j];if (j >= a[i]) f[i][j] += f[i - 1][j - a[i]];}cout << f[n][m] << '\n';
}int main()
{IOS int _ = 1;   // cin >> _;while (_ --) solve();return 0;
}

7. 【5.11】P1019 [NOIP 2000 提高组] 单词接龙

题目链接:https://www.luogu.com.cn/problem/P1019

【分析】
考察搜索+字符串处理。

【AC_Code】

#include <iostream>
#include <string>
#define IOS ios :: sync_with_stdio(0); cin.tie(0); cout.tie(0);using namespace std;string s[25]; int n, vis[25], ans;string check(string s1, string s2)
{for (int i = 1; i < s1.length() && i < s2.length(); i ++){if (s1.substr(s1.length() - i, i) == s2.substr(0, i))return (s1.substr(0, s1.length() - i) + s2);}return "0";
}void dfs(string drag)
{if (drag.size() > ans) ans = drag.size();for (int i = 0; i < n; i ++){if (vis[i] == 2) continue;if (check(drag, s[i]) != "0") { vis[i] ++; dfs(check(drag, s[i])); vis[i] --; }}
}void solve()
{cin >> n; for (int i = 0; i < n; i ++) cin >> s[i];char c; cin >> c;for (int i = 0; i < n; i ++){if (s[i][0] == c) { vis[i] ++; dfs(s[i]); vis[i] --; }}cout << ans << '\n';
}int main()
{IOS int _ = 1;   // cin >> _;while (_ --) solve();return 0;
}

结语
感谢您的阅读!期待您的一键三连!欢迎指正!

在这里插入图片描述

http://www.xdnf.cn/news/5410.html

相关文章:

  • [Java实战]Spring Boot 解决跨域问题(十四)
  • 深入探索 RKNN 模型转换之旅
  • llama.cpp初识
  • iVX 平台技术解析:图形化与组件化的融合创新
  • Qt模块化架构设计教程 -- 轻松上手插件开发
  • Vivado中可新建的工程类型解析
  • 招行数字金融挑战赛数据赛道赛题一
  • Java并发编程常见问题与陷阱解析
  • 基础框架搭建流程指南
  • 互联网大厂Java面试实战:从Spring Boot到微服务的技术问答与解析
  • JavaWeb, Spring, Spring Boot
  • LabVIEW车牌自动识别系统
  • E+H流量计通过Profibus DP主站转Modbus TCP网关与上位机轻松通讯
  • Qwen-2.5 omni
  • 浏览器的B/S架构和C/S架构
  • C# Newtonsoft.Json 使用指南
  • STM32学习记录——点灯
  • Qt坐标系 + 信号和槽 + connect函数(8)
  • 从InfluxDB到StarRocks:Grab实现Spark监控平台10倍性能提升
  • 技术书籍推荐(002)
  • MySQL数据库下篇
  • 缓存(4):常见缓存 概念、问题、现象 及 预防问题
  • [项目总结] 抽奖系统项目技术应用总结
  • 小土堆pytorch--torchvision中的数据集的使用dataloader的使用
  • 设计模式之工厂模式(二):实际案例
  • 支持selenium的chrome driver更新到136.0.7103.92
  • 飞蛾扑火算法matlab实现
  • 【仿真】【具身智能仿真】Isaac Simlab云端部署(入门学习性价比最高的方式)
  • 深入解析多选字段的存储与查询:从位运算到数据库设计的最佳实践
  • 仿真生成激光干涉包裹相位数据-用于深度学习训练!