J. The Power of the Dark Side - 2

题意

tournament 锦标赛

agility 敏捷

intelligence 智力

strength 力量

parameter 参数

restriction 限制

一个Jedi有三个参数,当两个Jedi打架的时候,拥有至少两个高于对方相应参数的Jedi获胜。
可以使一只Jedi黑化,黑化后可以重置参数,但是参数不能为负数,且三个参数的总和不变。
对于每一个Jedi,计算出它黑化后可以击败的数量。


题解

三个参数排序,前两个的值pre,三个值的和sum,对pre进行排序,对数组pre对sum进行二分搜索,寻找位置。

这一题细节很多,特别是第三点,太细了!!!
一:sum-2,因为至少两个值要大于
二:当3个 1 0 9 10^9 109相加会爆 int,用long long 存
三:当arr[2] <= 1时,记录一下特殊情况,pos不用减一。因为用sum-2去搜索的,假设arr[2]<=1,那这种情况就不包含自己了,其他情况都包含自己。


代码

#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define ll long long
const int N = 5e5+5;
ll pre[N];
ll sum[N];
ll d[N];

 void solve()
 {
    int n;
    scanf("%d",&n);
    rep(i,0,n-1){
         ll arr[3];
         scanf("%lld %lld %lld",&arr[0], &arr[1], &arr[2]);
         sort(arr,arr+3);
         pre[i] = arr[0] + arr[1];
         sum[i] = arr[0]+arr[1]+arr[2];
         if(arr[2]<=1) d[i]=1; // 参考别人的代码
     }
     sort(pre,pre+n);
     rep(i,0,n-1){
         ll pos = upper_bound(pre,pre+n,sum[i]-2)-pre; // 注意这里每个para都要大于,所以减去2
         if(pos==0||d[i]==1) printf("%lld%c",pos,i==n-1?'\n':' ');
         else printf("%lld%c",pos-1,i==n-1?'\n':' ');
     }
 }
 
 
int main() {
    solve();
    return 0;
}


别人的代码:https://www.cnblogs.com/ccsu-kid/p/11102610.html

感想

本来打算放弃来着,直接用别人的代码交,没想到最后抱着试一试的态度,成功了。
失败的原因只有一种,就是在抵达成功前选择放弃!!
但也侧面反映了这只是运气问题,还不够强,继续加油!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值