#include<bits/stdc++.h> using namespace std; struct node{ int x, y, v; }; bool cmp(node x, node y) { return x.x!=y.x? x.x<y.x : x.y<y.y; } map<double, vector<node> >mp; int main(){ int n; cin>>n; int sum = 0, cnt = 0; for(int i = 1; i <= n; i++){ int x, y, v; cin>>x>>y>>v; sum += v; //sum肯定全拿 mp[y*1.0/x].push_back(node{x,y,v});//按斜率(方向)分类 } for(auto x : mp){ //枚举每个方向 vector<node>vc = x.second; sort(vc.begin(), vc.end(), cmp);//按x,y排序 for(int i = 0; i < vc.size(); i++){ if(i==0 || vc[i].v!=1 || vc[i-1].v!=1){ cnt++; } } } cout<<sum<<" "<<cnt<<"\n"; return 0; }一句一句解释上述代码
时间: 2024-04-16 16:25:14 浏览: 31
这段代码是一个用于计算斜率分类的算法。现在我将逐行解释代码的功能:
1. `#include<bits/stdc++.h>`:这行代码是包含了所有常用的 C++ 标准库。
2. `using namespace std;`:这行代码是为了使用命名空间 `std`,避免在代码中频繁使用 `std::`。
3. `struct node{ int x, y, v; };`:这是一个结构体,用于存储点的坐标和值。`x` 和 `y` 是点的坐标,`v` 是点的值。
4. `bool cmp(node x, node y){ return x.x!=y.x? x.x<y.x : x.y<y.y; }`:这是一个比较函数,用于对结构体进行排序。首先按照 `x` 坐标进行排序,如果 `x` 坐标相等,则按照 `y` 坐标进行排序。
5. `map<double, vector<node> >mp;`:这是一个存储斜率和点集的映射关系的容器。斜率作为键,点集作为值。
6. `int main(){`:程序的入口函数。
7. `int n; cin>>n;`:输入变量 `n`,表示点的数量。
8. `int sum = 0, cnt = 0;`:初始化变量 `sum` 和 `cnt`,分别用于存储点的值之和和分类后的点的数量。
9. `for(int i = 1; i <= n; i++){`:循环读取每个点的坐标和值。
10. `int x, y, v; cin>>x>>y>>v;`:输入点的坐标和值。
11. `sum += v;`:将点的值累加到 `sum` 中。
12. `mp[y*1.0/x].push_back(node{x,y,v});`:将点根据斜率分类,并存储到映射关系中。
13. `for(auto x : mp){`:遍历映射关系中的每个斜率。
14. `vector<node>vc = x.second;`:获取当前斜率对应的点集。
15. `sort(vc.begin(), vc.end(), cmp);`:对点集按照结构体中定义的排序规则进行排序。
16. `for(int i = 0; i < vc.size(); i++){`:遍历排序后的点集。
17. `if(i==0 || vc[i].v!=1 || vc[i-1].v!=1){ cnt++; }`:如果当前点是第一个点,或者当前点的值不等于1,或者当前点与前一个点的值不等于1,则增加 `cnt` 的值。
18. `cout<<sum<<" "<<cnt<<"\n";`:输出 `sum` 和 `cnt` 的值。
19. `return 0;`:程序正常结束。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![h](https://img-home.csdnimg.cn/images/20210720083646.png)
![h](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)