2024ccpc女生赛题解

news/2024/11/13 11:02:32/文章来源:https://www.cnblogs.com/AuroraKelsey/p/18539458

考场上写的A,C,H,L,M
下来补一下剩下的

E

注意\(p[i]<i\)这个性质
和重心关系不大,一个简单的构造,手模几个样例就能发现规律。
倒着枚举:
\(c[i]=0\)的是叶子,不用处理
\(c[i]>0\),这个点连到父亲所在连通块的根上即可。
并查集维护连通块以及连通块的根,根就是连通块中最小编号的点。

#include <cstdio>
#include <iostream>
#include <cstring>
#include <string>
#include <cmath>
#include <vector>using namespace std;const int N=2e5+5;
#define LL long longint n;
int fa[N];
int find(int x) {return fa[x]==x?x:fa[x]=find(fa[x]);
}
int c[N];
vector<int>p[N];
void merge(int x,int y) {int fx=find(x),fy=find(y);if(fx>fy) swap(fx,fy);//id小的做根fa[fy]=fx;
}
bool vis[N];
int main() {int T;scanf("%d",&T);while(T--) {scanf("%d",&n);for(int i=1;i<=n;i++) {fa[i]=i;vis[i]=0;p[i].clear();}for(int i=1;i<=n;i++) {scanf("%d",&c[i]);if(c[i]==0)continue;for(int j=1,x;j<=c[i];j++) {scanf("%d",&x);p[i].push_back(x);}}for(int i=n;i;i--) {for(int j=0;j<c[i];j++) {int x=find(p[i][j]);printf("%d %d\n",i,x);merge(i,x);}}}return 0;
}

K 小凯的省奖之梦

(考场上根本没读这题)
大模拟,在暴力的基础上优化即可,就是考验码力

暴力想法是,两层循环,枚举买几个p,几个q,然后去check加上这些分后是否能拿到省奖,
算一下复杂度,
check是 nlogn,但由于要多次排序,常数挺大。
\(100*100*500*log(500)*const=5e7*const\)
t飞
第一次优化,二分q。在第22个点TLE。
第二次优化,发现可以分开处理两个学期的得奖情况,\(O(100*nlogn)\)处理好第一学期的,然后存在vector里,第二学期直接在第一学期基础上做就好。

AC代码:

#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <vector>using namespace std;const int N = 505;
int rk[N];
int n;
struct Stu {int id;string nam;int a1, a2, b1, b2, c1, c2;//zhi ,de ,tiint sum1, sum2;int prize;//奖项分
} s[N];
vector<Stu> sav[101];
vector<Stu> v1;
bool cmp1(Stu x, Stu y) {return x.nam < y.nam;
}
char str[30];
Stu kk;
int fir, sec, thi;
int m, q, p;
void get_rk(vector<Stu> v) {v.push_back(kk);sort(v.begin(), v.end(), cmp1);int cnt = 0;for (auto x: v) {rk[x.id] = ++cnt;}
}bool cmp2(Stu x, Stu y) {if (x.sum1 == y.sum1) {return x.a1 == y.a1 ? rk[x.id] < rk[y.id] : x.a1 > y.a1;} else {return x.sum1 > y.sum1;}
}bool cmp3(Stu x, Stu y) {if (x.sum2 == y.sum2) {return x.a2 == y.a2 ? rk[x.id] < rk[y.id] : x.a2 > y.a2;} else {return x.sum2 > y.sum2;}
}bool cmp4(Stu x, Stu y) {if (x.prize == y.prize) {if (x.sum1 + x.sum2 == y.sum1 + y.sum2) {return x.a1 + x.a2 == y.a1 + y.a2 ? rk[x.id] < rk[y.id] : x.a1 + x.a2 > y.a1 + y.a2;} else {return x.sum1 + x.sum2 > y.sum1 + y.sum2;}} else {return x.prize > y.prize;}
}bool cmp_z1(Stu x, Stu y) {return x.a1 > y.a1;
}
bool cmp_z2(Stu x, Stu y) {return x.a2 > y.a2;
}
int rk_zhi[N];//智yu排序
int score1, score2, score3;void sinister1(vector<Stu> &v, int add, int fir, int sec, int thi) {kk.a1 += add;kk.sum1 += add;v.push_back(kk);sort(v.begin(), v.end(), cmp_z1);int nowrank = 1;for (int i = 0; i < n; i++, nowrank++) {if (i > 0 && v[i].a1 == v[i - 1].a1) {rk_zhi[v[i].id] = rk_zhi[v[i - 1].id];} elserk_zhi[v[i].id] = nowrank;}sort(v.begin(), v.end(), cmp2);nowrank = 0;for (auto &it: v) {nowrank++;it.prize = 0;if (fir && rk_zhi[it.id] <= score1) {it.prize += 15;fir--;continue;}if (sec && rk_zhi[it.id] <= score2) {it.prize += 10;sec--;continue;}if (thi && rk_zhi[it.id] <= score3) {it.prize += 5;thi--;continue;}}kk.a1 -= add;kk.sum1 -= add;
}
//拷贝
bool check(vector<Stu> v, int add, int fir, int sec, int thi) {for (int i = 0; i < n; i++) {if (kk.id == v[i].id) {v[i].a2 += add;v[i].sum2 += add;break;}}sort(v.begin(), v.end(), cmp_z2);int nowrank = 1;for (int i = 0; i < n; i++, nowrank++) {if (i > 0 && v[i].a2 == v[i - 1].a2) {rk_zhi[v[i].id] = rk_zhi[v[i - 1].id];} elserk_zhi[v[i].id] = nowrank;}sort(v.begin(), v.end(), cmp3);nowrank = 0;for (auto &it: v) {nowrank++;if (fir && rk_zhi[it.id] <= score1) {it.prize += 15;fir--;continue;}if (sec && rk_zhi[it.id] <= score2) {it.prize += 10;sec--;continue;}if (thi && rk_zhi[it.id] <= score3) {it.prize += 5;thi--;continue;}}sort(v.begin(), v.end(), cmp4);bool ok = 0;nowrank = 0;for (auto &it: v) {nowrank++;if (it.id == kk.id) {if (nowrank <= m) ok = 1;break;}}return ok;
}
int main() {scanf("%d", &n);kk.nam = "crazyzhk";for (int i = 1; i <= n; i++) {scanf("%s %d %d %d %d %d %d", str, &s[i].a1, &s[i].b1, &s[i].c1, &s[i].a2, &s[i].b2, &s[i].c2);s[i].nam = str;s[i].id = i;s[i].sum1 = s[i].a1 + s[i].b1 + s[i].c1;s[i].sum2 = s[i].a2 + s[i].b2 + s[i].c2;if (s[i].nam == kk.nam) {kk.a1 = s[i].a1;kk.a2 = s[i].a2;kk.b1 = s[i].b1;kk.b2 = s[i].b2;kk.c1 = s[i].c1;kk.c2 = s[i].c2;kk.id = i;kk.sum1 = s[i].sum1;kk.sum2 = s[i].sum2;} else {v1.push_back(s[i]);}}get_rk(v1);fir = floor(0.15 * (double) n);sec = floor(0.25 * (double) n);thi = floor(0.35 * (double) n);score1 = floor(0.25 * (double) n);score2 = floor(0.45 * (double) n);score3 = floor(0.75 * (double) n);bool flg = 0;int ans = 1e8;scanf("%d %d %d", &m, &p, &q);for (int i = 0; i + kk.a1 <= 100; i++) {sav[i] = v1;sinister1(sav[i], i, fir, sec, thi);int L = 0, R = 100 - kk.a2;while (L <= R) {int mid = (L + R) >> 1;if (check(sav[i], mid, fir, sec, thi)) {flg = 1;ans = min(ans, i * p + mid * q);R = mid - 1;} else {L = mid + 1;}}}if (flg) {printf("%d", ans);} else {puts("Surely next time");}return 0;
}

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

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

相关文章

智启新篇 | 您的专属AI大模型解决方案!

随着汽车智能化程度的不断提升,智能座舱作为汽车的重要组成部分,其功能和复杂度也在不断增加。从多屏交互、增强现实(AR)技术到个性化设置和语音交互,智能座舱为驾驶者提供了前所未有的驾驶体验。然而,这些新技术的引入也使得智能座舱的测试变得更加复杂和困难。在这样的…

团队作业4——项目冲刺-1

团队作业4——项目冲刺信息项 内容课程名称 广工计院计科34班软工作业要求位置 作业要求作业目标 小飞棍团队对需求改进和系统设计进行讨论GitHub链接 GitHub一、团队简介队名:小飞棍队团队成员:姓名 学号罗振烘(组长) 3122004748庄崇立 3122004633李响 3121002802何昌洲 3…

# 学期(如2024-2025-1) 学号(如:20241402) 《计算机基础与程序设计》第8周学习总结

学期(如2024-2025-1) 学号(如:20241402) 《计算机基础与程序设计》第8周学习总结 作业信息这个作业属于哪个课程 <班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里 <作业要求的链接>(如2024-2025-1计算机基础与程序设计第一周作业)这个…

XXL-JOB docker 初始化

一、因为xxl-job 使用的是mysq 数据库,所有在 yaml 文件中,需要优先启动 mysql version: 3 services:mysql:image: mysql:8.0container_name: mysql8restart: alwaysenvironment:MYSQL_ROOT_PASSWORD: 123456MYSQL_DATABASE: xxl_jobports:- "3307:3306"xxl-job:im…

深度解读AI在数字档案馆中的创新应用:高效识别与智能档案管理

一、项目背景介绍 在信息化浪潮推动下,基于OCR技术的纸质档案电子化方案成为解决档案管理难题的有效途径。该方案通过先进的OCR技术,能够统一采集各类档案数据,无论是手写文件、打印文件、复古文档还是照片或扫描的历史资料,都能实现高效识别。利用文档智能分析技术,我们对…

2个月搞定计算机二级C语言——真题(11)解析

1. 前言 今天双 11,正好轮到讲第 11 篇,直接来个三 11。 那么本篇我们讲解2个月搞定计算机二级C语言——真题112. 程序填空题 2.1 题目要求2.2 提供的代码 #include <stdio.h> #include <ctype.h> #pragma warning (disable:4996) void fun(int* cd, int* cu…

代码随想录——二叉树-12.平衡二叉树

自顶向下递归(前序遍历)这种方法是一开始想到的,虽然ac了但是对于它的本质却不清不楚,不知道时间复杂度,不知道属于前序遍历。思路 首先得到root节点的左右子树的深度(左右),若深度差绝对值大于1(中),则root为根的树不是平衡二叉树; 否则继续递归root的左右子树,其…

【论文系列】之 ---- CLIP

CLIP(Contrastive Language-Image Pre-Training) 从名字显而易见:语言-图像,预训练,主要用于学习图像 该模型的核心思想是使用大量图像和文本的配对数据进行预训练,以学习图像和文本之间的对齐关系 CLIP模型有两个模态,一个是文本模态,一个是视觉模态,包括两个主要部分…

[极客大挑战 2019]Havefun

页面一只猫,啥东西也没有,直接检查页面源码发现只有输入参数cat==dog就会输出一个值直接拿到flag

代码随想录——二叉树-11.完全二叉树的节点个数

思路 一、层序遍历,时间复杂度O(n) 二、利用完全二叉树性质,时间复杂度O(logn * logn)(小于O(n)) 完全二叉树性质:若树深度为h,则前h-1层节点都达到最大值。第h层节点都集中在最左侧的位置 完全二叉树要么1.是满二叉树 2.最后一层没满满二叉树计算节点数太方便了,直接用…

Rocky9系统安装PostgreSQL

官网 https://www.postgresql.org/环境查看安装 登录官网根据平台选择帮助文档sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm sudo dnf -qy module disable postgresql sudo dnf install -y po…

【GiraKoo】GLSurfaceView闪现黑屏的问题

Android下GLSurfaceView在显示正式内容之前,会有一个黑屏的过程。本文解释如何解决这个问题。【GiraKoo】GLSurfaceView闪现黑屏的问题 现象在Android平台,多个Activity之间进行切换。 使用GLSurfaceView进行描画,会有短暂的黑屏显示。对策设置GLSurfaceView的Surface的Form…