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" ;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】