2015年百度之星初赛(hdu5246-5251)
来源:互联网 发布:网络制式英文 编辑:程序博客网 时间:2024/06/06 04:39
超级赛亚ACMer
Accepts: 868
Submissions: 5329
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 32768/32768 K (Java/Others)
思路:贪心,排序,先找到小于M离M最近的数,然后贪心,尽量加K的最大值
#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<vector>#include<cmath>#include<queue>#include<stack>#include<map>#include<set>#include<algorithm>using namespace std;typedef long long LL;const int maxn=100010;int N,K,M;LL a[maxn];int main(){ int T; scanf("%d",&T); LL cas=0; while(T--) { scanf("%d%d%d",&N,&M,&K); for(LL i=1; i<=N; i++) scanf("%I64d",&a[i]); sort(a+1,a+N+1); int i=0; while(i<N&&a[i+1]<=M) i++; printf("Case #%I64d:\n",++cas); if(i==0) { printf("madan!\n"); continue; } LL cur=K; LL last=a[i]; bool flag=1; i++; while(i<=N) { if(a[i]-last>cur) { flag=0; break; } if(i<N&&a[i+1]-last<=cur)i++; else { cur--; cur=max(cur,0LL); last=a[i]; i++; } } if(flag) printf("why am I so diao?\n"); else printf("madan!\n"); } return 0;}
找连续数
Accepts: 401
Submissions: 1911
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 32768/32768 K (Java/Others)
比赛的时候没搞出来
可以首先与处理出所有的1~1000的K区间,然后直接查询,或者RMQ在线查询,判断的时候,要考虑是不是有重复,是不是有断点
首先是预处理写法:
#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<vector>#include<cmath>#include<queue>#include<stack>#include<map>#include<set>#include<algorithm>using namespace std;const int maxn=10010;int N,M;int a[maxn];int ans[maxn],pre[maxn];int minv[maxn],maxv[maxn];bool vis[maxn];map<int,int> mp;void solve(){ mp.clear(); for(int i=1;i<=N;i++) { maxv[i]=minv[i]=a[i]; vis[i]=1; if(mp.find(a[i])==mp.end())pre[i]=-1; else pre[i]=mp[a[i]]; mp[a[i]]=i; } for(int i=1;i<=1000;i++) { ans[i]=0; if(i>N)break; for(int j=1;j+i<=N+1;j++) { if(!vis[j])continue; if(maxv[j]-minv[j]+1!=i)continue; ans[i]++; } for(int j=1;j+i<=N;j++) { maxv[j]=max(maxv[j],a[i+j]); minv[j]=min(minv[j],a[i+j]); if(pre[i+j]>=j)vis[j]=false; } }}int main(){ int cas=1; while(scanf("%d%d",&N,&M)!=EOF) { for(int i=1;i<=N;i++)scanf("%d",&a[i]); solve(); printf("Case #%d:\n",cas++); while(M--) { int x; scanf("%d",&x); printf("%d\n",ans[x]); } } return 0;}
然后是RMQ写法,参考了BC上大神的
#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<vector>#include<cmath>#include<queue>#include<stack>#include<map>#include<set>#include<algorithm>using namespace std;typedef long long LL;const double eps=1e-6;const int maxn=10100;LL A[maxn][20],B[maxn][20],C[maxn][20];int logn[maxn];map<LL,int> mp;int N,M;LL a[maxn];int can(int l,int r){// int k=logn[r-l+1]; int k=0; while((1<<(k+1))<=(r-l+1))k++; LL a=max(A[l][k],A[r-(1<<k)+1][k]); LL b=min(C[l][k],C[r-(1<<k)+1][k]); LL c=max(B[l][k],B[r-(1<<k)+1][k]); return (c-b==r-l)&&a<l;}int main(){ int cas=1; scanf("%d%d",&N,&M);// for(int i=1;i<=N;i++)// logn[i]=int(floor(log(double(i))/log(2.0)+eps)); for(int i=1;i<=N;i++)scanf("%I64d",&a[i]); for(int i=1;i<=N;i++) B[i][0]=C[i][0]=a[i]; for(int i=1;i<=N;i++) A[i][0]=mp[a[i]],mp[a[i]]=i; for(int j=1;(1<<j)<=N;j++) for(int i=1;i+(1<<j)<=N+1;i++) A[i][j]=max(A[i][j-1],A[i+(1<<(j-1))][j-1]), C[i][j]=min(C[i][j-1],C[i+(1<<(j-1))][j-1]), B[i][j]=max(B[i][j-1],B[i+(1<<(j-1))][j-1]); printf("Case #%d:\n",cas++); while(M--) { int x,ans=0; scanf("%d",&x); for(int i=1;i+x-1<=N;i++) if(can(i,i+x-1))ans++; printf("%d\n",ans); } return 0;}
序列变换
Accepts: 816
Submissions: 3578
Time Limit: 4000/2000 MS (Java/Others)
Memory Limit: 32768/32768 K (Java/Others)
思路:二分
#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<vector>#include<cmath>#include<queue>#include<stack>#include<map>#include<set>#include<algorithm>using namespace std;const int maxn=100010;int N;int a[maxn];bool can(int x){ int last=a[1]-x; for(int i=2;i<=N;i++) { if(a[i]+x<=last)return false; last=max(a[i]-x,last+1); } return true;}int main(){ int T,cas=1; scanf("%d",&T); while(T--) { scanf("%d",&N); int sum=0; for(int i=1;i<=N;i++)scanf("%d",&a[i]); int l=0,r=1e6; while(l<r) { int mid=(l+r)>>1; if(can(mid))r=mid; else l=mid+1; } printf("Case #%d:\n%d\n",cas++,l); } return 0;}
KPI
Accepts: 517
Submissions: 2185
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 32768/32768 K (Java/Others)
思路:线段树维护离散化之后的区间中在队列中的数个数
#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<vector>#include<cmath>#include<queue>#include<stack>#include<map>#include<set>#include<algorithm>using namespace std;const int maxn=20100;int N;int root,tot;queue<int> qu;int X[maxn];struct node{ char op[10]; int x;}q[maxn];struct IntervalTree{ int sum[maxn<<2]; void build() { memset(sum,0,sizeof(sum)); } void update(int o,int l,int r,int pos,int val) { if(l==r) { sum[o]+=val; return ; } int mid=(l+r)>>1; if(pos<=mid)update(o<<1,l,mid,pos,val); else update(o<<1|1,mid+1,r,pos,val); pushup(o); } void pushup(int o) { sum[o]=sum[o<<1]+sum[o<<1|1]; } int query(int o,int l,int r,int val) { if(l==r)return l; int mid=(l+r)>>1; if(sum[o<<1]>=val)return query(o<<1,l,mid,val); else return query(o<<1|1,mid+1,r,val-sum[o<<1]); }}tree;int main(){ int x; int cas=1; while(scanf("%d",&N)!=EOF) { int cnt=0; for(int i=1;i<=N;i++) { scanf("%s",q[i].op); if(q[i].op[0]=='i') { scanf("%d",&q[i].x); X[++cnt]=q[i].x; } } printf("Case #%d:\n",cas++); while(!qu.empty())qu.pop(); sort(X+1,X+cnt+1); int num=0; tree.build(); for(int i=1;i<=N;i++) { if(q[i].op[0]=='i') { int pos=lower_bound(X+1,X+cnt+1,q[i].x)-X; tree.update(1,1,cnt,pos,1); qu.push(q[i].x); num++; } else if(q[i].op[0]=='o') { int pos=lower_bound(X+1,X+cnt+1,qu.front())-X; tree.update(1,1,cnt,pos,-1); qu.pop(); num--; } else { int pos=tree.query(1,1,cnt,num/2+1); printf("%d\n",X[pos]); } } } return 0;}
0 0
- 2015年百度之星初赛(hdu5246-5251)
- hdu 5251(2015百度之星初赛+旋转卡壳)
- 2015年百度之星程序设计大赛 - 初赛(1)
- 2015年百度之星程序设计大赛 - 初赛(1) 【题解】
- 2015年百度之星程序设计大赛 - 初赛(2)【题解】
- 2015年百度之星程序设计大赛 - 初赛(1)
- 2015年百度之星初赛(1) --- C 序列变换
- 2015年百度之星初赛(1) --- D KPI
- 2015年百度之星初赛(1) --- F 矩形面积
- 2015百度之星初赛(1)problem1002
- 百度之星2015初赛第一场
- 百度之星2015初赛第二场
- 2007年百度之星初赛题目
- 2007年百度之星初赛题目
- 2009百度之星初赛
- 百度之星2016初赛
- 2017百度之星初赛
- 2017百度之星初赛
- 2015编程之美 彩色的树
- iOS编程——面向对象的编程
- (大数据之hive)hive联表查询、创建外部表练习
- Install: Cheetah
- std名字空间(大学课件整理)
- 2015年百度之星初赛(hdu5246-5251)
- 第一天开通csdn博客
- 杭电ACM2019java做法
- (大数据之hive)hive的自定义函数练习
- 对学弟学妹学习C++的建议
- 内联函数(大学课件整理)
- Django: An example of Django template
- 一些自己常用的mysql命令
- 线程同步 资源锁定(二)Event