D1. Coffee and Coursework (Easy version) and D2. Coffee and Coursework (Hard Version)
生活随笔
收集整理的這篇文章主要介紹了
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)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: des算法s盒java实现_DES算法详
- 下一篇: NLP-中文、英文分词