转载请注明出处,谢谢 http://blog.csdn.net/ACM_cxlove?viewmode=contents by---cxlove
大好的涨rate机会,又被浪费了。
250PT:有多少个不同的数*某个数的最多个数,结果把变量名写错了
class KingdomAndDucks{ public: int minDucks(vector <int> duckTypes){ int cnt[51],ans=0,tmp=1; memset(cnt,0,sizeof(cnt)); for(int i=0;i<duckTypes.size();i++) if(cnt[duckTypes[i]]==0){ ans++; cnt[duckTypes[i]]++; } else{ cnt[duckTypes[i]]++; tmp=max(tmp,cnt[duckTypes[i]]); } return ans*tmp; } };
500PT:有一个数列,每个数可以加上或者减去X以内的数,使数列变成严格递增的数列,最小的X。
二分,然后判断是否满足答案,遍历一次,每次使每个数尽可能的小,判断是否满足严格递增。
class KingdomAndTrees{ public: int minLevel(vector <int> heights){ int low=0,high=1000000005,mid,h; while(low<=high){ mid=(low+high)/2; bool flag=true; for(int i=0;i<heights.size();i++) if(i==0) h=max(1,heights[0]-mid); else{ if(heights[i]+mid<=h){ flag=false; break; } h=max(heights[i]-mid,h+1); } if(flag) high=mid-1; else low=mid+1; } return low; } };
1000PT:怒撸搜索,加了各种剪枝,结果还是没过,据说是背包?有待研究