log-2022/1/17

log-2022/1/17

1)刷题:

C. Set or Decrease
题目大意:

有n个数字,每次操作可以使某个数减一或者让两个数变成相同的。问最少多少次操作可以使得sum小于等于k。

思路:

一开始看到数据范围我想二分,去二分最小值减小的数量d,使d最小,但是d最小和ans最小中间还有一个赋值操作是在变化的,找不到减的次数和赋值次数的关系就不行。请教一金二银三铜一铁选手之后得到了图中的公式,改变了方法。如下:

要将整个数列的和减小到k,减小最快的方式就是将最大值变成最小值(当然,若将最小值仔减小一点,整个数列和的减小幅度会更大)。那么,贪心的来想,每次都将最大值变成最小值,将m个大值变成最小值后可以满足和小于等于k。只要枚举m就行了,复杂度o(n)。

ll n , m , k , num ;
ll a[N] , p[N] ; 

void Clear(){

}

ll flr(ll x , ll y){//包括负数的向下取整
	if(x * y < 0) return -1 * ((-1 * x + y - 1) / y ) ;
	return x / y ;
}

ll solve(){//这代码wa2,真的是想不明白...
	cin >> n >> k ;
	rep(i , 1 , n) cin >> a[i] ;
	sort(a + 1 , a + n + 1) ;
	rep(i , 1 , n) p[i] = p[i - 1] + a[i] ;
	ll ans = INF ;
	if(p[n] <= k) return 0 ;
	rep(i , 0 , n - 1){//枚举m
		ll x = flr(k - p[n - i] + p[1] , i + 1) ;
	//	cout << x << "\n" ;
		if(a[1] >= x)ans = min( ans , a[1] - x + i) ;
	}
	return ans ;
}

做了一下午,就是wa2 。人麻了...明天再想想这个

不用明天了,现在想到了:

ll flr(ll x , ll y){
	if(x < 0) return -1 * ((-1 * x + y - 1) / y ) ;
	return x / y ;
}

ll solve(){
	cin >> n >> k ;
	rep(i , 1 , n) cin >> a[i] ;
	sort(a + 1 , a + n + 1) ;
	rep(i , 1 , n) p[i] = p[i - 1] + a[i] ;
	ll ans = INF ;
	if(p[n] <= k) return 0 ;
	
	rep(i , 0 , n - 1){
		ll x = flr(k - p[n - i] + p[1] , i + 1) ;
	//	cout << x << "\n" ;
		if(a[1] >= x)ans = min( ans , a[1] - x + i) ;
		else ans = min(ans , 1LL * i) ;//这个else没有想到
	}
	return ans ;
}
C. Monsters And Spells
题目大意:

有n个怪兽,第i个怪兽会出现在ti时刻,有hi的血量。在任意时间点可以施法让魔力值变为1,之后的时间点可以选择让魔力值+1或者取消施法或者让魔力值变回1 。维持该时刻的魔力值x需要消耗x点魔法,魔力值大于等于怪兽血量就能杀掉怪兽,问最少要花费多少魔力值才能杀掉所有怪兽。

思路:

从后往前双指针做一下。

void solve(){
	cin >> n ;
	rep(i , 1 , n) cin >> t[i] ;
	rep(i , 1 , n) cin >> h[i] ;
	
	ll i = n , ans = 0 ;
	
	while(i >= 1){
		ll j = i , nowh = h[i] ;
		while(j >= 1 && t[j] - nowh + 1 <= t[j - 1]){
			nowh = max(nowh - (t[j] - t[j - 1]) , h[j - 1]) ;j -- ;
			//cout << "j=" << j << " nowh=" << nowh << "\n" ; 
		}
		ll tt = t[i] - (t[j] - nowh) ;
		//cout << tt << "=>" ;
		ans += (tt + 1) * tt / 2 ;
	//	cout << ans << "\n" ;		
		i = j - 1 ;
		
	}
	cout << ans << "\n" ; 
}
posted @   tyrii  阅读(55)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示