日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

D1. Coffee and Coursework (Easy version) and D2. Coffee and Coursework (Hard Version)

發布時間:2023/12/15 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 D1. Coffee and Coursework (Easy version) and D2. Coffee and Coursework (Hard Version) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?http://codeforces.com/contest/1118/problem/D1

http://codeforces.com/contest/1118/problem/D2

題意:有n杯咖啡,m張作業,沒杯咖啡有能量點a[i],一點能量能做一張作業,同一天喝多杯能量會減少:第一杯a[i],第二杯max(0,a[i]-1),第三杯max(0,a[i]-2).....;問完成m張作業最少天數,不能完成-1;

思路:貪心,從最大的開始取;二分,設k天完成,第一次k天就是a[i],第二次k天a[i]-1,第三個a[i]-2(相當于把后面的一個個加到第一個k天)....

?

#include<algorithm> #include<set> #include<vector> #include<queue> #include<cmath> #include<cstring> #include<iostream> #include<algorithm> #include<set> #include<vector> #include<queue> #include<cmath> #include<cstring> #include<sstream> #include<cstdio> #include<ctime> #include<map> #include<stack> #include<string> using namespace std;#define sfi(i) scanf("%d",&i) #define pri(i) printf("%d\n",i) #define sff(i) scanf("%lf",&i) #define ll long long #define mem(x,y) memset(x,y,sizeof(x)) #define INF 0x3f3f3f3f #define eps 1e-6 #define PI acos(-1) #define lowbit(x) ((x)&(-x)) #define zero(x) (((x)>0?(x):-(x))<eps) #define fl() printf("flag\n") ll gcd(ll a,ll b){while(b^=a^=b^=a%=b);return a;} const int maxn=2e5+9; const int mod=1e9+7;template <class T> inline void sc(T &ret) {char c;ret = 0;while ((c = getchar()) < '0' || c > '9');while (c >= '0' && c <= '9'){ret = ret * 10 + (c - '0'), c = getchar();} } ll a[maxn]; ll n,m; bool ch(int mid) {ll sum=0;ll num=0;ll sb=0;for(int i=0;i<n;i++){sum=sum+max((ll)0,a[i]-sb);num++;if(num==mid) sb++,num=0;}return sum>=m; }int main() {cin>>n>>m;for(int i=0;i<n;i++){cin>>a[i];}sort(a,a+n);reverse(a,a+n);int l=1;int r=n;int ans=-1;while(l<=r){int mid=(l+r)>>1;if(ch(mid)){r=mid-1;ans=mid;}else l=mid+1;}cout<<ans<<endl;return 0; }

python:

maxn=200000+9def ch(mid):sum=0num=0sb=0for i in range(n):sum+=max(0,int(a[i]-sb))num+=1if num==mid:sb+=1num=0return sum>=mop=input() op=op.split() n=int(op[0]) m=int(op[1])a=[0]*nop=input() op=op.split()for i in range(len(op)):a[i]=int(op[i])a.sort() a.reverse()l=1 r=n ans=-1 while l<=r:mid=(l+r)>>1if ch(mid):ans=midr=mid-1else :l=mid+1 print(ans)

?

總結

以上是生活随笔為你收集整理的D1. Coffee and Coursework (Easy version) and D2. Coffee and Coursework (Hard Version)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。