MooFest

MooFest

https://ac.nowcoder.com/acm/problem/106587

其实,我英语水平垃圾的很。。。
题目大意:
给你坐标和每个坐标的权值,题目求n个坐标两两之间的“声音权值”的和,其中任意两个点之间的“声音权值” = 距离*max(两点的权值)。
1.暴力求解法:容易想,也容易TLE
2.树状数组:
我们在处理的过程中,按照权值大小升序排序,可以省略掉取max的步骤。
对于排序之后的第i个元素,设坐标为,权值为,那么对于任意的,都有,在处理第i个元素的时候,权值都是取的。其中,权值小于的点有个,设他们在集合中。
但是这样之后,坐标x是无序的,设中坐标小于的点有个,坐标的和是;
大于的就有个,(中间要去掉一个本身),坐标的和是
然后求距离,坐标小于的点的距离和是,坐标大于的点的距离和是,权值和就是
这个过程其实是可以转化为区间和的,例如,求中坐标小于的坐标和,其实就是以坐标为树状数组的下标,求的区间和。其他详细看代码。
code:

//#include <bits/stdc++.h>
#include <iostream>
#include <cstdio>
#include <algorithm>

using namespace std;

typedef long long ll;
typedef unsigned long long ull;

const int N = 20000+5;
//const ll inf=0x3f3f3f3f3f3f3f3f;
const int inf=0x3f3f3f3f;
const int mod =  199999;
const double eps=1e-7;
//const int tmp=31;

int sn[N],sx[N];//坐标和,坐标数量
struct node
{
    int v,x;
    bool operator<(const node& b)const{
        return v<b.v;
    }
}a[N];
int lowebit(int x){
  return x&(-x);
}
void add(int i,int v){

   while(i<=20000){
      sx[i]+=v;
      sn[i]++;
      i+=lowebit(i);
   }
}
ll ask(int i,int op){//op是0的时候计算坐标和,1的时候计算坐标数量

  ll s=0;
  while(i>0){
    if(!op) s+=sx[i];
    else s+=sn[i];
    i-=lowebit(i);
  }
  return s;
}
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d%d",&a[i].v,&a[i].x);
    sort(a+1,a+n+1);
    ll s=0;
    for(int i=1;i<=n;i++){
        ll cor=ask(a[i].x,0);
        ll cor2 = ask(20000,0);//x的最大值是20000,所以用它当作区间的右端点,
                               //最后减去小于a[i].x的坐标和,剩下的才是真正大于a[i].x的坐标和,之后再求距离。
        ll num=ask(a[i].x,1);
        s += a[i].v*(num*a[i].x-cor)+a[i].v*(cor2-cor-(i-num-1)*a[i].x);
        add(a[i].x,a[i].x);
    }
    printf("%lld\n",s);
    return 0;
}

poj不支持万能头文件!!!

全部评论

相关推荐

2025-12-24 08:50
已编辑
上海工程技术大学 数据分析师
9.21-28参加第一轮七牛云秋招项目比赛,三人组队做一个AI角色对话网站。我们的目标是争取拿offer和前16名的奖金(最低500元)10.11打电话通知我们准备参加终面10.14参加终面(官网上说就一次终面),面试官为技术人员。我们来回路程4小时。10.23打电话通知我们,进了前20,10.27还有一次路演面试,评出前16名10.27再次参加终面,面试官为高管。来回路程4小时,告知我们一周内出结果。10.31在群里询问是否出结果,没有回复。11.5公司人员告知第一批有一波通知结果了,另外还有一波。11.12一位队员收到offer,两位队员被拒绝,评奖没消息。12.2在群里询问公司人员是否有消息,一位公司人员退群,没有回复。12.4在群里询问公司人员是否有消息,说是会帮忙反馈。12.12我们打听到HR主动告知某位参赛选手获奖500元。12.13在群里询问是否有消息,公司人员说在最终确认中,近期会联系,或者通过官网了解情况。12.23在群里询问是否有结果,公司人员告知没有获奖。————分割线————图1图2为群里聊天记录,图3为奖项设置,可怜的学生党为了个offer和500块都被硬拖3个月。我说实话辛苦了一周做项目参加比赛,没有offer,没有获奖也是做好心理准备的,但是不能这么无视我们的消息,并且拖着我们三个月吧。所有的方案、代码、产品说明文档等等参赛资料都是公开透明提交给公司的,我在的群参赛者大群是第11个,200多人,最多三人一队,有两批比赛,所以至少上百个队伍,上百个方案吧,很难说不是白嫖这么大规模的方案和创意。中间在群里问比赛结果,每次要么是不回复,要么是说问问负责人,还在确定中等等,然后就拖着。10月23号前20都已经出来了,排个名次要整整2个月吗?一直到今天12月23号跟我们说没获奖(不知道是不是因为队员没有接受他们offer的原因,给的薪资白菜价,所以队员拒绝了offer)官网说的第一批十月中旬公布结果,结果到现在花了3个月时间,之前有别人说是不是来窃取创意的,我还说这么大公司不至于吧。现在看来就是来白嫖方案的,做项目做了一个星期,后面又花精力,又花时间的做PPT搞了两次终演,最后因为队伍不是公司招聘候选,所以这么无视我们?
程序员小白条:七牛云好几年这样的事情了,这玩意都是潜规则搞好的,没啥,能有这能力的,说实话也不去七牛云了
秋招落幕,你是He or...
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务