排列计算 题解(java)

排列计算

https://ac.nowcoder.com/acm/contest/5477/F

考点:贪心+差分
首先我们要考虑计算每个位置的访问次数。
我们可以用差分来计算每一个位置访问了多少次。
然后排序,将从小到大以此乘以1  2  3  4~~~,求和即可。
import java.util.*;
import java.math.*;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
import java.io.OutputStreamWriter;
import java.io.BufferedReader;
import java.io.PrintWriter;
public class Main {
    public static void main(String args[])throws IOException {
        StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
        PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
        in.nextToken();
        int n = (int)in.nval;
        in.nextToken();
        int m = (int)in.nval;
        long num[] = new long[n];
        long p[] = new long[n+1];
        for(int t=0;t<m;t++)
        {
            in.nextToken();
            int l = (int)in.nval;
            in.nextToken();
            int r = (int)in.nval;
            p[l-1]+=1;
            p[r]-=1;
        }
        num[0] = p[0];
        long u=p[0];
        for(int i=1;i<n;i++)
        {
            num[i] = p[i]+u;
            u+=p[i];
        }
        long sum=0;
        Arrays.sort(num);
        for(int i=0;i<n;i++)
        {
            sum+=(num[i]*(i+1));
        }
        out.print(sum);
        out.flush();
    
    }
}


全部评论

相关推荐

uu们,拒offer时hr很生气怎么办我哭死
爱睡觉的冰箱哥:人家回收你的offer,或者oc后没给你发offer的时候可不会愧疚你,所以你拒了也没必要愧疚他。
点赞 评论 收藏
分享
仁者伍敌:难怪小公司那么挑剔,让你们这些大佬把位置拿了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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