5.16pkusc模拟赛1
2016-05-18 09:34
204 查看
A.切绳子,不可多条连接,求n条绳子切成k段的最大长度。
卡精度?转成cm二分。n<=10000(5.16)
B.
C.n个数分组,连续的才能分成一组,且每组Max-Min<=k,的方案数。n<=100000(5.16)
rmq+二分/单调队列
D.
E.求最小的m,使得[0,m]的线段树存在[l,r]区间节点。
0<=l
F.
卡精度?转成cm二分。n<=10000(5.16)
#include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<algorithm> #define N 10005 using namespace std; int n,k; double a ;int b ; int main(){ freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); long long l=1,r=(int)1e7+1; scanf("%d%d",&n,&k); for(int i=1;i<=n;i++) scanf("%lf",&a[i]),b[i]=(int)((double)a[i]*100+0.5); while(l<r){ int mid=(l+r)/2; int ans=0; for(int i=1;i<=n;i++) ans+=(int)(b[i]/mid); if(ans<k) r=mid; else l=mid+1; } printf("%.2lf\n",(double)(l-1)/100); return 0; }
B.
C.n个数分组,连续的才能分成一组,且每组Max-Min<=k,的方案数。n<=100000(5.16)
rmq+二分/单调队列
#include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<algorithm> using namespace std; #define N 100005 #define ll long long int ffmin [20],ffmax [20]; int a ,n,k,T; ll ans; bool judge(int from,int to){ // printf("%d %d\n",from,to); int l=(int)log2(to-from+1); int mx=max(ffmax[from][l],ffmax[to-(1<<l)+1][l]); int mn=min(ffmin[from][l],ffmin[to-(1<<l)+1][l]); return mx-mn<k; } int main(){ freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); scanf("%d",&T); while(T--){ ans=0; memset(ffmax,0,sizeof(0)); memset(ffmin,0,sizeof(0)); scanf("%d%d",&n,&k); for(int i=1;i<=n;i++) scanf("%d",&a[i]),ffmin[i][0]=a[i],ffmax[i][0]=a[i]; int l=(int)log2(n); for(int i=1;i<=l;i++) for(int j=1;j<=n-(1<<i)+1;j++){ ffmin[j][i]=min(ffmin[j][i-1],ffmin[j+(1<<(i-1))][i-1]); ffmax[j][i]=max(ffmax[j][i-1],ffmax[j+(1<<(i-1))][i-1]); } for(int i=1;i<=n;i++){ int l=i,r=n+1; while(l<r){ int mid=(l+r)/2; if(judge(i,mid)) l=mid+1; else r=mid; } ans=(ll)(ans+(l-1-i+1)); } printf("%lld\n",ans); } return 0; }
D.
E.求最小的m,使得[0,m]的线段树存在[l,r]区间节点。
0<=l
#include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<algorithm> #define ll long long using namespace std; bool judge(ll l,ll r){ if(l==0) return 1; if(l<0) return 0; return judge(l-(r-l+1),r)||judge(l-(r-l+1)-1,r); } ll solve(ll l,ll r){ if(r==909){ r++;r--; } if(r>2*l) { // printf("**%I64d\n",r); return -1; } if(judge(l,r)) return r; ll len=(r-l+1); ll ans=solve(l-len-1,r); ll tmp=solve(l-len,r); if(ans==-1) ans=tmp; else if(tmp!=-1) ans=min(ans,tmp); tmp=solve(l,r+len); if(ans==-1) ans=tmp; else if(tmp!=-1) ans=min(ans,tmp); tmp=solve(l,r+len-1); if(ans==-1) ans=tmp; else if(tmp!=-1) ans=min(ans,tmp); return ans; } int main(){ freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); ll l,r; while(~scanf("%I64d%I64d",&l,&r)){ if(l==0) printf("%I64d\n",r); else printf("%I64d\n",solve(l,r)); } return 0; }
F.
相关文章推荐
- .NET基于Redis缓存实现单点登录SSO的解决方案
- 当下流行的分布式文件系统大阅兵
- ElasticSearch 攻略(三)概念认识
- 11. Container With Most Water
- SCRUM项目 5.0
- View(视图)——ListView之ArrayAdapter
- 单播、多播(组播)和广播的区别,搞通信选整明白这三个东东
- LeetCode Potential Thought Pitfalls
- 正则表达式汇总
- 欢迎使用CSDN-markdown编辑器
- laravel 学习笔记——请求与响应
- 58.Length of Last Word
- I2C和SPI学习总结
- 异步编程之Javascript Promises 规范介绍
- MFC自定义消息
- Android Studio 打包APK
- Android逆向之旅---Android中如何获取在非Root设备中获取应用隐私数据
- sqlserver数据库类型对应Java中的数据类型
- js登录与layout菜单布局
- genymotion报错:Failed to open a session for the virtual machine,Unable to load R3 module xxxx/VBoxDD.D