SDUT 2023 summer team contest(for 22) - 1-Gym - 102220

B - Balanced Diet

 题意:这题题意有点难搞啊,就是有n个物品,一个有m种,对于第 i 种物品如果你要买它就至少买 l[i]个,然后就是给你n行,每行两个数,ai,bi,表示这个糖果类型为bi,价值为ai(注意同一种类型的糖果价值可能不同),让你任意选1~n个糖果,让选的糖果的价值和除以你选的糖果中数量最多的那种糖果的数量的比值最大

思路:我们只需要枚举最多选几个,其余的也尽可能贪心的多选,但是不能超过我们枚举的最大值,具体见代码,写在注释上了

#include <bits/stdc++.h>
using namespace std;
#define pi 3.1415926
#define X first
#define Y second
#define endl "\n"
#define int long long
#define pb push_back
typedef pair<int, int> PII;
#define max(a, b) (((a) > (b)) ? (a) : (b))
#define min(a, b) (((a) < (b)) ? (a) : (b))
#define Ysanqian ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
const int N = 1e5 + 1000, M = 1010, inf = 0x3f3f3f3f, mod = 998244353;
int gcd(int a, int b)
{return b ? gcd(b, a % b) : a;
}
int n, m;
vector<int> g[N];
vector<int> val[N];
int sum[N];
int l[N];
bool cmp(int a, int b)
{return a > b;
}
void solve()
{cin >> n >> m;for (int i = 1; i <= m; i++)cin >> l[i]; // 第i种糖果最少买l[i]种for (int i = 1; i <= n; i++){int a, b;cin >> a >> b;g[b].pb(a); // b种糖果价值a}for (int i = 1; i <= m; i++) // m种物品{sort(g[i].begin(), g[i].end(), cmp);for (int j = 0; j < g[i].size(); j++) // 枚举每一种物品选1~这个物品的最大值所有情况,注意有l[i]的限制,我们取max即可{val[max(l[i], j + 1)].pb(g[i][j]); //}g[i].clear();}int y = 0, x = 1, yy = 0, xx = 0;for (int i = 1; i <= n; i++)//这里枚举的是最多的选几个的时候,当最多的确定的时候我们贪心的{                           //想肯定是每一种糖果都选这个最大值的情况下分子价值最大 xx = i;for (int j = 0; j < val[i].size(); j++){yy += val[i][j];//这个yy就代替了前缀和(当然我们也可将val改成一维从而变成前缀和, }                   // //因为他保留了前几次的值val[i].clear();if (yy * x > y * xx)//这里用乘法来减小精度的问题,用x,y来记录最大值即可x = xx, y = yy;}int gcdd = gcd(y, x);cout << y / gcdd << '/' << x / gcdd << endl;
}
signed main()
{Ysanqian;int T;T = 1;cin >> T;while (T--)solve();return 0;
}

将val改成一维前缀和数组:(其实都一样,就改了一丢丢)

#include <bits/stdc++.h>
using namespace std;
#define pi 3.1415926
#define X first
#define Y second
#define endl "\n"
#define int long long
#define pb push_back
typedef pair<int, int> PII;
#define max(a, b) (((a) > (b)) ? (a) : (b))
#define min(a, b) (((a) < (b)) ? (a) : (b))
#define Ysanqian ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
const int N = 1e5 + 1000, M = 1010, inf = 0x3f3f3f3f, mod = 998244353;
int gcd(int a, int b)
{return b ? gcd(b, a % b) : a;
}
int n, m;
vector<int> g[N];
int sum[N];
int l[N];
bool cmp(int a, int b)
{return a > b;
}
void solve()
{cin >> n >> m;vector<int> val(n+1);for (int i = 1; i <= m; i++)cin >> l[i]; for (int i = 1; i <= n; i++){int a, b;cin >> a >> b;g[b].pb(a); }for (int i = 1; i <= m; i++) {sort(g[i].begin(), g[i].end(), cmp);for (int j = 0; j < g[i].size(); j++) {val[max(l[i], j + 1)]+=(g[i][j]); }g[i].clear();}for(int i=1;i<=n;i++)val[i]+=val[i-1];int y = 0, x = 1, yy = 0, xx = 0;for (int i = 1; i <= n; i++){                           xx = i;yy=val[i];if (yy * x > y * xx)x = xx, y = yy;}int gcdd = gcd(y, x);cout << y / gcdd << '/' << x / gcdd << endl;
}
signed main()
{Ysanqian;int T;T = 1;cin >> T;while (T--)solve();return 0;
}

C - Line-line Intersection

 题意:每一组就是给你n条直线的上的两个点,让你求这些直线的交点,两条重叠的直线也算有交点,

思路:我们想什么时候才有交点,分为两种情况 1: 斜率不同,2: 斜率相同,但截距不同

那么无交点的情况就有一种,1: 斜率相同且截距不同,

由此我们可以知道我们开两个map一个4元存截距,另一个三元存斜率即可,且可以覆盖斜率不存在的情况

对于我们读入这一条直线来说,我们假设前面的先与其都交点,但是实际肯定不是,那余实际差什么呢,差的无非就是与其无交点的直线呗,所以我们减去与其无交点的情况,我们仔细想想,无交点的情况就只有上面一种情况,然而我们并没有直接的这个数据,我们可以减去与其斜率相同的

斜率相同的有两种情况1: k相同,截距相同,2:k相同,截距不相同,我们减去了这两种情况

,实际只需减去对答案无贡献的2,故我们还要讲1加回来即可

至于xx*b-yy*a==截距*xx我们不需要除以xx以免精度不准确,用到这个的时候,只有k相同,截距相同的时候,当k相同的时候,xx,yy都是最简的,所以k相同,xx一定相同,所以直接保存截距*xx即可

#include <bitsdc++.h>
using namespace std;
#define pi 3.1415926
#define X first
#define Y second
#define endl "\n"
#define int long long
#define pb push_back
typedef pair<int, int> PII;
#define max(a, b) (((a) > (b)) ? (a) : (b))
#define min(a, b) (((a) < (b)) ? (a) : (b))
#define Ysanqian ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
const int N = 2e5 + 10, M = 1010, inf = 0x3f3f3f3f, mod = 998244353;
int n;
int a,b,c,d;
int gcd(int a,int b)
{return b?gcd(b,a%b):a;
}
struct node
{int a,b,c,d;
}pos[N];
int fun(int x)
{int ans=1;for(int i=1;i<=x;i++)ans*=i;return ans/2;
}
void solve()
{map<pair<PII,int>,int>mp;//四元,yy,xx,c 分别为y2-y1,x2-x1,和截距map<PII,int>g;//三元保存yy,xx,  yy就是斜率kcin>>n;int ans=0;for(int i=1;i<=n;i++){cin>>a>>b>>c>>d;int xx=c-a;int yy=d-b;xx=xx/gcd(xx,yy);yy=yy/gcd(xx,yy);//cout<<xx<<' '<<yy<<endl;ans+=(i-1+mp[{{yy,xx},xx*b-yy*a}]-g[{yy,xx}]);//i-1为假设与前面的直线都相交,不相交只有一种情况,就是k相同,且截距不同,我g[{yy,xx}]++;	                     //我们减去k相同的情况(1.k相同截距不同,2.k相同截距相同),可见我们减去这两种mp[{{yy,xx},xx*b-yy*a}]++;           //情况是多减去了,对答案有贡献的情况2,故要加回来}cout<<ans<<endl;
}
signed main()
{Ysanqian;int T;// T = 1;cin >> T;while (T--)solve();return 0;
}

E - Minimum Spanning Tree

 题意:就是给你一个图(G),让其变化为其线图(LG),转化规则就是边变为点,两点距离位原来边的边权之和,让我们求(LG)的最小生成数,

思路:我们从原图(G)入手,管察原图每个点对答案的贡献,那么我们画图观察发现对于每个点,其对答案的贡献就是将与他相连的边的和再加上选择一个最小的*(degree-2),对于每一个点都一样,我们遍遍历即可

  

(字太丑了,没办法了。。。。)

 

#include <bits/stdc++.h>
using namespace std;
#define pi 3.1415926
#define X first
#define Y second
#define endl "\n"
#define int long long
#define pb push_back
typedef pair<int, int> PII;
#define max(a, b) (((a) > (b)) ? (a) : (b))
#define min(a, b) (((a) < (b)) ? (a) : (b))
#define Ysanqian ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
const int N = 1e6 + 10, M = 1010, inf = 0x3f3f3f3f, mod = 998244353;
struct edge
{int v, w;bool operator<(const edge &other) const{return w < other.w;}
};
vector<edge> g[N];
int n;
void solve()
{cin >> n;for (int i = 1; i <= n; i++)g[i].clear();for (int i = 1; i < n; i++){int u, v, w;cin >> u >> v >> w;g[u].pb({v, w});g[v].pb({u, w});}int ans = 0;for (int i = 1; i <= n; i++){sort(g[i].begin(), g[i].end());int minn = inf;int degree = g[i].size();for (int j = 0; j < degree; j++){ans += g[i][j].w;minn = min(minn, g[i][j].w);}ans += minn * (degree - 2);}cout << (int)ans << endl;
}
signed main()
{Ysanqian;int T;// T=1;cin >> T;while (T--)solve();return 0;
}

G - Radar Scanner

 题意:给你n个方形的左下角,以及右上角坐标,问是否存在一点(x,y)使得让它到所有矩形的总路程最小

思路:两维独立,先考虑一维,x轴。

对于一个x轴上的区间[ l , r ],让其移动到x的代价位( |l-x| +|r-x|+|r-l| )/2

除以 2 以及减去 | r − l | 的部分与 x 无关,只需要最小化

∑(|l − x| + |r − x|),当x取l,r的中点时最小

对于二维情况我们存入所有的点,然后排序找到终点,带入公式即可

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxx = 1e6 + 100;
ll x[maxx], y[maxx];
int n, t;
int main()
{ios::sync_with_stdio(0);cin >> t;while (t--){cin >> n;ll ans = 0;ll x1, x2, y1, y2;for (int i = 0; i < n; i++){cin >> x1 >> y1 >> x2 >> y2;ans -= y2 - y1 + x2 - x1; // 先将总的线段长度减去x[i] = x1;				  // 记录点y[i] = y1;x[i + n] = x2;y[i + n] = y2;}sort(x, x + 2 * n); // 排序,sort(y, y + 2 * n);ll xx = x[n - 1], yy = y[n - 1]; // 找中位数for (int i = 0; i < n * 2; i++){ // 看与中位数的距离ans += abs(x[i] - xx) + abs(y[i] - yy);}printf("%lld\n", ans / 2);}
}

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

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

相关文章

非50欧系统阻抗的S参数测试

1. S参数依赖于系统阻抗 S参数的定义需要约定一个系统阻抗。同一个微波电路&#xff0c;在不同系统阻抗下的S参数是不同的。例如&#xff0c;50欧电阻在50欧系统阻抗下的S11为零&#xff0c;是没有反射的匹配状态&#xff1b;但50欧电阻在75欧系统阻抗下的S11不为零&#xff0…

Git教程

版本库 创建版本库 通过git init命令把目录变成Git可以管理的仓库 把一个文件放到Git仓库只需要两步&#xff1a; 第一步&#xff0c;用命令git add告诉Git&#xff0c;把文件添加到仓库&#xff1a; git add readme.txt执行上面的命令&#xff0c;没有任何显示&#xff0…

【Linux】进程间通信——管道/共享内存

文章目录 1. 进程间通信2. 管道匿名管道命名管道管道的特性管道的应用&#xff1a;简易的进程池 3. System V共享内存共享内存的概念共享内存的结构共享内存的使用代码实现 1. 进程间通信 进程间通信&#xff08;Inter-Process Communication&#xff0c;简称IPC&#xff09;是…

vue 集成tinymce2实现图片,视频以及文件的上传

vue 集成tinymce2实现图片&#xff0c;视频以及文件的上传 1. 安装插件 &#xff08;1&#xff09;安装tinymce npm install tinymce -S &#xff08;2&#xff09;安装tinymce-vue npm install tinymce/tinymce-vue3.0.1 -S 2. 复制静态文件到public目录 资源下载路径&…

【116个】网络安全测试相关面试真题

1、Burpsuite常用的功能是什么&#xff1f; 2、reverse_tcp和bind_tcp的区别&#xff1f; 3、拿到一个待检测的站或给你一个网站&#xff0c;你觉得应该先做什么&#xff1f; 4、你在渗透测试过程中是如何敏感信息收集的&#xff1f; 5、你平时去哪些网站进行学习、挖漏洞提交到…

git rebase 合并提交

一. 合并提交步骤 git log --oneline 查看当前提交记录 git rebase -i HEAD~2 选择最后提交的2条记录进行合并进入编辑界面,将c865404的pick改为f, 表示向前合并也就是向cc5a54合并 编辑完之后:wq 保存并退出git rebase --continuegit push --force origin feature/v1.2 推送…

Python venv 和 virtualenv 虚拟环境的基本使用

1.前言 venv 和 virtualenv 都是搭建虚拟环境的工具&#xff0c;virtualenv 是第三方开源的&#xff0c;而 venv 作为 virtualenv 的一个子集自 Python3.3 开始集成到标准库中&#xff0c;在 virtualenv 的文档中可以看到他们的区别&#xff1a; 没有 app-data 种子方法&#…

WEB APIs day4 (1)

一、日期对象 1.实例化 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevi…

MySQL(十):MySQL语法-进阶

MySQL语法-进阶 数据类型Text 类型Number 类型Date 类型 ASALTER TABLEconcat、group_concatSQL注入阻止SQL注入方案一方案二方案三 HAVING 子句临时表正则表达式获取服务器元数据事务导出数据导出数据导出表作为原始数导出SQL格式的数据 导入数据解决无法导入问题使用 LOAD DA…

VS工程项目中属性中无Qt设置问题解决方案

VS工程项目中属性中无Qt设置问题解决方案 若VS工程中&#xff0c;创建的是Qt工程&#xff0c;或者从Qt Creator工程转换为VS 工程时&#xff0c;VS项目属性中确无Qt Project Setttings等设置时&#xff0c;可通过如下方案解决 1. 右键项目&#xff0c;在下拉框中选择Qt项 2.…

肯尼亚税务局如何利用RPA、AI等创新技术来推动税务合规增加税收?

在当今的数字化时代&#xff0c;税务部门的工作变得日益复杂。依赖手动程序为税务部门带来了巨大的困难&#xff0c;这使得在有效管理税收和实现收入目标上遇到了阻碍。手动流程往往效率低下&#xff0c;易出错&#xff0c;而且难以应对大规模的数据处理需求。如果不能解决该问…

Spring MVC相关注解运用 —— 中篇

目录 一、RESTful风格支持 1.1 RESTful风格介绍 1.2 postman使用 二、PathVariable 2.1 实例程序 2.2 测试结果 三、PostMapping、GetMapping、PutMapping、DeleteMapping 四、HiddenHttpMethodFilter 4.1 在web.xml配置过滤器 4.2 控制器方法 4.3 JSP页面 4.4 测…