7-2 芬兰木棋

1:

!每次只能往一个斜率上攻击(攻击范围,斜率上攻击点的个数直接确定)

2:

枚举每个方向(斜率),从前往后枚举,如果有连续的一段木棋的p值全都是1,那么把它们一起击倒得到的收益和分别击倒得到的收益是一样的,可以合并击倒。如果单个木棋的p值大于1,肯定是单独击倒划算,就单独击倒。

ACocde:

#include
using namespace std;
#define int long long 
#define inf 0x3f3f3f3f
struct node{
	int x,y,p;
};
map>mp;
int n,sum;
bool cmp(node i,node j){
	if(i.x!=j.x) return i.x>n;
  for(int i=1;i<=n;i++){
  	int x,y,p;
  	cin>>x>>y>>p;
  	sum+=p;
  	mp[y*1.00/x].push_back((node){x,y,p});//把斜率相同的点放在一起 
  }
  int cnt=0;
  for(auto x:mp){
  	vectorv=x.second;
  	sort(v.begin(),v.end(),cmp);
  	for(int i=0;i

over~

你可能感兴趣的:(c++,算法,数据结构)