2024 CCPC第五届辽宁省程序设计竞赛 集训2

news/2024/10/24 18:24:48/文章来源:https://www.cnblogs.com/orangecodelog/p/18500167

A. 早餐

print("39.20")

B. 水论文

signed main()
{int n,k;cin >> n >> k;set<int> st;int ans = 0;st.insert(n);for(int i = 0, t = n; i <= k; i ++, t = sqrt(t)){st.insert(t);if(st.count(t * t)) ans += 1;else ans += k - i + 1;if(t == 1) break;}cout << ans;return 0;
}

C. nim游戏?

import sys
input = lambda:sys.stdin.readline()n = int(input())
for i in range(n):print('lose')

D. 校验和

#define int long long
void solve()
{int n, k;cin >> n >> k;string s;cin >> s;bitset<N> a(s);set<int> st;unsigned int ans;bool ok = 0;int cnt = a.count();for (int i = 0; i <= k; i++){if (__builtin_popcount(i + cnt) == i)st.insert(cnt + i);}if (st.size()){ans = *st.begin();vector<int> res;while(ans){res.push_back(ans & 1);ans >>= 1;}while (res.size() < k)res.push_back(0);if (res.size() > k)cout << "None";elsefor (int i = res.size() - 1; i >= 0; i--)cout << res[i];cout << "\n";}elsecout << "None\n";
}

E. 数房子

#include <bits/stdc++.h>
using namespace std;
#define IOS                       \ios_base::sync_with_stdio(0); \cin.tie(0);                   \cout.tie(0);
// #define int long long
#define endl '\n'
#define all(_x) _x.begin(), _x.end()
#define range(_x, _st, _ed) (_x.begin() + _st), (_x.begin() + _ed)
#define rep(_x, _y, _z) for (int _x = _y; _x < _z; _x++)
#define matrix(_x, _y, _z) vector<vector<int>>(_x, vector<int>(_y, _z))
#define debug(_x) cout << #_x << '=' << _x << endl
typedef long long i64;
typedef pair<int, int> pii;
typedef vector<vector<int>> mat;
constexpr int N = 2e5 + 10;
// dont use umap!!!const double eps = 1e-12;
const double pi = acos(-1);
int cmp(double x, double y)
{if (fabs(x - y) < eps)return 0;return x > y ? 1 : -1;
}
int sgn(double x)
{if (fabs(x) < eps)return 0;return x > 0 ? 1 : -1;
}template <typename T>
struct Point
{T x, y;T cross(Point p1, Point p2){return p1.x * p2.y - p2.x * p1.y;}Point operator-(Point p){return {x - p.x, y - p.y};}Point operator+(Point p){return {x + p.x, y + p.y};}Point operator*(double p){return {x * p, y * p};}T operator*(Point p){return cross(*this, p);}Point operator/(double p){return {x / p, y / p};}bool operator==(Point p){return (!cmp(x, p.x)) && (!cmp(y, p.y));}bool operator!=(Point p){return !(*this == p);}Point rotate(double p){return {x * cos(p) - y * sin(p), x * sin(p) + y * cos(p)};}
};
typedef Point<double> point;struct line
{point p, v;
};double dot(point p, point v)
{return p.x * v.x + p.y * v.y;
}double area(point p, line l)
{return (p - l.p) * (l.v - l.p);
}double dist(point p1, point p2)
{return hypot(p1.x - p2.x, p1.y - p2.y);
}point cross_point(line l1, line l2)
{auto p = l1.p, v = l1.v, q = l2.p, w = l2.v;auto u = p - q;double t = w * u / (v * w);return p + v * t;
}signed main()
{IOS;int n;cin >> n;vector<point> ps(n);for (int i = 0; i < n; i++){cin >> ps[i].x >> ps[i].y;}//    e// a /\ d//  |  |// b -- cint cnt = 0;for (int a = 0; a < n; a++)     // 枚举afor (int b = 0; b < n; b++) // 枚举b{for (int c = 0; c < n; c++) // 枚举c{if (area(ps[c], {ps[a], ps[b]}) < 0 && sgn(dot(ps[c] - ps[b], ps[a] - ps[b])) == 0) // 如果c在ab直线的右边且ab和bc垂直{for (int d = 0; d < n; d++) // 枚举d{if (sgn((ps[d] - ps[c]) * (ps[a] - ps[b])) == 0 &&sgn((ps[d] - ps[a]) * (ps[c] - ps[b])) == 0) // 如果dc和ab平行而且ad和bc平行{for (int e = 0; e < n; e++) // 枚举e{// e在直线ab右边,直线dc左边且在ad上方if (sgn(dot(ps[e] - ps[a], ps[b] - ps[a])) < 0 && sgn(dot(ps[e] - ps[d], ps[c] - ps[d])) < 0 && sgn(area(ps[e], {ps[d], ps[c]})) > 0 && sgn(area(ps[e], {ps[a], ps[b]})) < 0 && sgn(dist(ps[e], ps[a]) - dist(ps[e], ps[d])) == 0){// cout << a << " " << b << " " << c << " " << d << " " << e << '\n';cnt++;}}}}}}}cout << cnt;return 0;
}

F. 相遇

vector<vector<int>> edge(N);
int fa[N][21], dep[N], L[N], R[N];
int now = 0;void dfs(int x, int f)
{dep[x] = dep[f] + 1;fa[x][0] = f;L[x] = ++now; // 记录当前子树dfs序的左端点for (int i = 1; i < 20; i++){fa[x][i] = fa[fa[x][i - 1]][i - 1];}for (auto v : edge[x]){if (v == f)continue;dfs(v, x);}R[x] = now; // 记录当前子树dfs序的右端点
}int lca(int x, int y)
{if (dep[x] < dep[y])swap(x, y);for (int i = 19; i >= 0; i--){if (dep[x] - (1 << i) >= dep[y]){x = fa[x][i];}}if (x == y)return x;for (int i = 19; i >= 0; i--){if (fa[x][i] != fa[y][i]){x = fa[x][i];y = fa[y][i];}}return fa[x][0];
}int dis(int x, int y)
{return dep[x] + dep[y] - 2 * dep[lca(x, y)];
}int getfa(int x, int k) // 求x节点向上k级的祖先节点
{for (int i = 19; i >= 0; i--){if ((1 << i) <= k){k -= (1 << i);x = fa[x][i];}}return x;
}int n, m;
int a[N][2]; // 记录点对
int c[N];    // 差分数组signed main()
{IOS;cin >> n >> m;for (int i = 1; i < n; i++){int x, y;cin >> x >> y;edge[x].push_back(y);edge[y].push_back(x);}for (int i = 1; i <= m; i++)cin >> a[i][0] >> a[i][1];dfs(1, 0);auto check = [&](int mid){for (int i = 1; i <= m; i++){if (dis(a[i][0], a[i][1]) <= mid){c[1] += 2; // 这两个点都可以满足,在差分数组整体+2continue;}int anc = lca(a[i][0], a[i][1]);for (int j = 0; j < 2; j++) // 分别处理两个点{int len = dis(anc, a[i][j]); // 得到其中一点到点对lca的距离if (len > mid)               // 如果大于答案{// 说明首都在当前节点mid级祖先节点的子树int p = getfa(a[i][j], mid);c[L[p]] += 1; // 对应的答案区间+1c[R[p] + 1] -= 1;}else // 如果小于等于答案{// 说明首都在另外一点的 两点距离-mid-1 级祖先的子树上int p = getfa(a[i][j ^ 1], dis(a[i][0], a[i][1]) - mid - 1);// 对应的答案区间+1c[1] += 1;c[L[p]] -= 1;c[R[p] + 1] += 1;}}}int now = 0;int mx = 0;for (int i = 1; i <= n; i++){now += c[i]; // 枚举每个节点的答案区间交集mx = max(mx, now);c[i] = 0; // 初始化差分数组}return mx >= 2 * m; // 如果存在一个满足所有点条件的首都,则说明mid可行};int l = 0, r = n;while (l < r){int mid = (l + r) >> 1;if (check(mid))r = mid;elsel = mid + 1;}cout << l;
}

G. 生成括号序列

typedef long long i64;
const int mod = 998244353;int main()
{ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);string s;cin >> s;int k = 0;vector<int> v;for (int i = 0; i < s.length(); i++){if (s[i] == ')'){if (s[i - 1] == '(') // 如果是小括号k++;else // 如果是大括号v.push_back(k);}}i64 ans = 1;for (int i = v.size() - 1, j = 0; i >= 0; i--){ans = ans * (k - v[i] + 1 + j) % mod;j++;}cout << ans << endl;return 0;
}

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

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

相关文章

ZetCode-GUI-教程-九-

ZetCode GUI 教程(九)原文:ZetCode 协议:CC BY-NC-SA 4.0wxWidgets 中的布局管理原文: http://zetcode.com/gui/wxwidgets/layoutmanagement/典型的应用由各种小部件组成。 这些小部件放置在容器小部件内。 程序员必须管理应用的布局。 这不是一件容易的事。 在 wxWidgets…

ZetCode-PHP-教程-一-

ZetCode PHP 教程(一)原文:ZetCode 协议:CC BY-NC-SA 4.0PHP 教程原文: https://zetcode.com/lang/php/这是 PHP 教程。 本教程涵盖了 PHP 编程语言的核心。 它使用 PHP CLI。 PHP 教程适合初学者。 目录PHP 语言 词法结构 基础知识 数据类型 字符串 运算符 控制流 数组 数…

BeginnersBook-C-语言示例-一-

BeginnersBook C 语言示例(一)原文:BeginnersBook 协议:CC BY-NC-SA 4.0C 程序:检查阿姆斯特朗数原文: https://beginnersbook.com/2014/06/c-program-to-check-armstrong-number/如果数字的各位的立方和等于数字本身,则将数字称为阿姆斯特朗数。在下面的 C 程序中,我们…

BeginnersBook-C---教程-一-

BeginnersBook C++ 教程(一)原文:BeginnersBook 协议:CC BY-NC-SA 4.0C++ 中的for循环原文: https://beginnersbook.com/2017/08/cpp-for-loop/循环用于重复执行语句块,直到满足特定条件。例如,当您显示从 1 到 100 的数字时,您可能希望将变量的值设置为 1 并将其显示 …

BeginnersBook-Servlet-教程-一-

BeginnersBook Servlet 教程(一)原文:BeginnersBook 协议:CC BY-NC-SA 4.0项目的web.xml文件中的welcome-file-list标签原文: https://beginnersbook.com/2014/04/welcome-file-list-in-web-xml/你有没见过web.xml文件中的<welcome-file-list>标签并想知道它是什么?…

.net7.0 WebApi 添加 JWT 验证

https://blog.csdn.net/u012563853/article/details/128659472 详细步骤: 1.创建默认WebApi 项目2.开始添加认证包 安装 Microsoft.AspNetCore.Authentication.JwtBearer 包 这个包是用来支持WebApi 的 JWT 认证的3.在appsetting 中配置JWT的配置信息 这里需要注意的是 key …

2024-10-24 瀑布流(vue3)

效果图: 代码:<template><div id="waterfallContainer" class="waterfall-container"><div v-for="(column, columnIndex) in columns" :key="columnIndex" class="waterfall-column"><div v-for=&q…

如何用反射调用泛型类的方法

例子一:泛型类不含构造函数using System; using System.Reflection;namespace 使用反射调用泛型类的方法 {class Program{static void Main(string[] args){//定义要使用的类型参数(就是调用方法时要传入的参数类型,例如int)Type genericTypeArgument = typeof(int);//获取…

[日志分析篇]-利用ELK分析jumpserver日志-日志拆分篇

需要通过elk日志分析平台接收jumpserver日志,对日志进行过滤和拆分。并通过Grafana进行企业微信告警推送和大屏展示1.系统介绍名称 软件版本jumpserver jumpserver-3.10.13-tlselasticsearch elasticsearch-8.12.2kibana kibana-8.12.2logstash logstash-8.12.2granfa Grafana…

IDEA运行不了代码

同样的代码在eclipse可以正常运行,创建的方法也保持一样,为什么在IDEA就报错,本人是小白看不懂下面的报错

扩展被恢复分区挡住的 C 盘

之前装系统的时候想着以后要不要装个 Ubuntu 以作备用,所以给 SSD 分区的时候留了一小部分,没有全分给 C 盘。结果后来用 WSL 用得乐不思蜀了,觉得剩下的空间留着没必要,于是想把剩下的空间扩容给 C 盘。结果操作的时候发现 C 盘后面跟了一个恢复分区!无法给 C 盘扩容了。…