题目链接:
分析:
先说得分,由于木棋的分数大于等于1,所以最终得分是所有木棋分数的总和。
再说最少次数,对于每条直线上的木棋,可以由近到远击倒任意个,所以当木棋分数大于1,次数加1,当木棋分数等于1且连续有x个,次数加(x-1)。
代码:
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int n,ans,cnt;
struct node{
int x,y,p;
};
map<double,vector<node> > mp;
bool cmp(node a,node b){
if(a.x==b.x)
return a.y<b.y;
return a.x<b.x;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
int x,y,p;
cin>>x>>y>>p;
ans+=p;
mp[1.0*y/x].push_back({x,y,p});
}
for(auto it:mp){
ve