POJ 1990 MooFest
来源:互联网 发布:淘宝前100名半价怎么抢 编辑:程序博客网 时间:2024/04/30 04:23
POJ 1990 MooFest
思路:其实这题挺简单,关键是把样例搞懂,写出来之后可以发现是先按照牛的音量排序,然后算和的时候音量乘以(所有牛与当前那头牛距离之差的绝对值)之和~~有点绕口。。,
AC代码:
import java.util.Arrays;import java.util.Comparator;import java.util.Scanner;class Cow{int v,x;}class Tree{static int maxn=20000;int c[]=new int[maxn|1];private static int lowbit(int x) {return x&(-x);}void upDate(int x,int add){for(int i=x;i<=maxn;i+=lowbit(i))c[i]+=add;}int sum(int x){int sum=0;for(int i=x;i>0;i-=lowbit(i))sum+=c[i];return sum;}}public class Main{static int maxn=20000;static Cow vx[]=new Cow[maxn|1]; static Scanner scan=new Scanner(System.in);public static void main(String[] args){int n=scan.nextInt();for(int i=1;i<=n;i++){vx[i]=new Cow();vx[i].v=scan.nextInt();vx[i].x=scan.nextInt();}Arrays.sort(vx,1,n+1,new Comparator<Cow>() {@Overridepublic int compare(Cow a,Cow b){return (a.v>=b.v)?1:-1;}});long sum=0,allTotal=0;//下面开了两个树状数组,alltotal记录总距离,a[1]~a[i-1]的牛的坐标之和Tree count=new Tree();//这个树状数组用来记录个数,upDate(x,1)是记录x轴坐标大小为x的牛的个数(增加一个)Tree total=new Tree();//这个树状数组用来记录距离,upDate(x,x)是记录x轴坐标之和~~知悉想想就能想通,为什么要这么处理for(int i=1;i<=n;i++){int x=vx[i].x;int count_x=count.sum(x),total_x=total.sum(x);sum+=vx[i].v*(allTotal-2*total_x-(i-1-count_x)*x+count_x*x);count.upDate(x,1);total.upDate(x,x);allTotal+=x;}System.out.println(sum);}}
0 0
- POJ 1990 MooFest
- poj 1990 MooFest
- POJ - 1990 MooFest
- POJ 1990 MooFest
- Poj 1990 MooFest
- POJ 1990 MooFest
- POJ-1990-MooFest
- POJ 1990 MooFest
- poj 1990 - MooFest
- poj 1990 MooFest
- POJ 1990 MooFest
- POJ 1990 MooFest
- POJ 1990 MooFest
- POJ 1990 MooFest
- POJ 1990 MooFest
- POJ 1990 MooFest
- poj 1990 MooFest
- POJ 1990 MooFest
- 软件版本-初见
- 黑马程序员_困兽之斗
- NYOJ 847 S+T
- 第一章 绪论
- UITableViewCell高亮时其子视图的状态修改
- POJ 1990 MooFest
- C++类型转换总结
- UML类图几种关系的总结(转载)
- JVM学习笔记——一个简单程序编译成字节码指令后的解释
- 黑马程序员_JAVA8新特性
- LIS(最长上升子序列两种算法模板)DP模板,并且输出序列
- BM算法
- 将毫秒 换算成(天 时 分 秒 毫秒)
- 人与人相处