zoukankan      html  css  js  c++  java
  • CF1213D Equalizing by Division

    easy version

    hard version

    问题分析

    直接从hard version入手。不难发现从一个数(x)能得到的数个数是(O(log x))的。这样总共有(O(nlog n))个数。然后对每一种数开一个大根堆维护前(k)个就好了。

    参考程序

    #include <bits/stdc++.h>
    using namespace std;
    
    const int INF = 2147483647;
    const int Maxn = 200010;
    const int MaxAlpha = 200000;
    int n, k, A[ Maxn ], Sum[ Maxn ];
    priority_queue< int > Pq[ Maxn ];
    int main() {
    	scanf( "%d%d", &n, &k );
    	for( int i = 1; i <= n; ++i ) scanf( "%d", &A[ i ] );
    	sort( A + 1, A + n + 1 );
    	for( int i = 1; i <= n; ++i ) {
    		int t = 0;
    		if( Pq[ A[ i ] ].size() == k ) Sum[ A[ i ] ] -= Pq[ A[ i ] ].top(), Pq[ A[ i ] ].pop();
    		Pq[ A[ i ] ].push( 0 );
    		while( A[ i ] ) {
    			++t; A[ i ] /= 2;
    			if( Pq[ A[ i ] ].size() < k ) Pq[ A[ i ] ].push( t ), Sum[ A[ i ] ] += t;
    			else
    				if( Pq[ A[ i ] ].top() > t ) {
    					Sum[ A[ i ] ] -= Pq[ A[ i ] ].top(), Pq[ A[ i ] ].pop();
    					Sum[ A[ i ] ] += t; Pq[ A[ i ] ].push( t );
    				}
    		}
    	}
    	int Ans = INF;
    	for( int i= 0; i <= MaxAlpha; ++i ) 
    		if( Pq[ i ].size() == k )
    			Ans = min( Ans, Sum[ i ] );
    	printf( "%d
    ", Ans );
    	return 0;
    }
    
    
  • 相关阅读:
    jquery web 國際化
    Struts2 分割字符串标签s:generator
    (55) 销售锁货功能
    (54) 记录销售单修改详细
    (53) 动态列表自定义
    exe文件作为服务启动
    (52)KeyError错误
    (51) magento集成增加到款通知
    (50)与magento集成
    (49) odoo context操作
  • 原文地址:https://www.cnblogs.com/chy-2003/p/11478049.html
Copyright © 2011-2022 走看看