NOIP2016提高组复赛
2017-08-21 19:29
148 查看
D1T1:水题
D1T2:
D1T3:换教室
D2T1:组合数问题
题解:
杨辉三角基础应用+二维差分
D2T2:蚯蚓
很简单的75送分,用自带的priority_queue,但是这样会T
我们可以发现,如果自己建立三个单调队列,q1未切割的蚯蚓长度,q2切割后较长的蚯蚓长度,q3切割后较短的蚯蚓长度
只要把读入的数据排个序就可以发现这三个都是单调队列
那每次在队首取max,然后弹出。
D2T3:愤怒的小鸟
D1T2:
D1T3:换教室
D2T1:组合数问题
题解:
杨辉三角基础应用+二维差分
#include <cstdio> using namespace std; int c[2005][2005],g[2005][2005]; int main() { int T,i,j,k; scanf("%d%d",&T,&k); for (i=0;i<=2000;i++) c[i][0]=1; for (i=1;i<=2000;i++) { for (j=1;j<=i;j++) { c[i][j]=(c[i-1][j]+c[i-1][j-1])%k; if (c[i][j]==0) g[i][j]=1; g[i][j]+=g[i-1][j]+g[i][j-1]-g[i-1][j-1]; } g[i][i+1]=g[i][i];//求前缀和中必不可少的哦 } while (T--) { int n,m; scanf("%d%d",&n,&m); if(m>n) m=n; printf("%d\n",g [m]); } }
D2T2:蚯蚓
很简单的75送分,用自带的priority_queue,但是这样会T
我们可以发现,如果自己建立三个单调队列,q1未切割的蚯蚓长度,q2切割后较长的蚯蚓长度,q3切割后较短的蚯蚓长度
只要把读入的数据排个序就可以发现这三个都是单调队列
那每次在队首取max,然后弹出。
#include <cstdio> #include <queue> #include <iostream> #include <cstring> #include <cmath> #include <algorithm> #define N 7050005 #define INF 1e9 using namespace std; double p; int q1 ,q2 ,q3 ,h1,t1,h2,t2,h3,t3,qq,a[100005]; void pts75() { priority_queue<int>q; int n,m,qq,u,v,t,x=1,i; scanf("%d%d%d%d%d%d",&n,&m,&qq,&u,&v,&t); p=(double)u/(double)v; for (i=1;i<=n;i++) { int a; scanf("%d",&a); q.push(a); } for(i=1;i<=m;i++) { int now=q.top(); q.pop(); int noww=now+(i-1)*qq; if (i==x*t) { x++;printf("%d ",noww); } int a1=floor((int)noww*p),a2=noww-a1; q.push(a1-i*qq); q.push(a2-i*qq); } printf("\n"); i=1;x=1; while (!q.empty()) { int now=q.top(); q.pop(); if (i==x*t) {x++;printf("%d ",now+m*qq);} i++; } } int findmax(int i) { int a1,a2,a3; if (h1<=t1) a1=q1[h1];else a1=-INF; if (h2<=t2) a2=q2[h2];else a2=-INF; if (h3<=t3) a3=q3[h3];else a3=-INF; if (a1>=a2 && a1>=a3){h1++;return a1+i*qq;} if (a2>=a1 && a2>=a3){h2++;return a2+i*qq;} h3++; return a3+i*qq; } int main() { int n,m,u,v,t,x=1,i; scanf("%d%d%d%d%d%d",&n,&m,&qq,&u,&v,&t); p=(double)u/(double)v; for (i=1;i<=n;i++) scanf("%d",&a[i]); sort(a+1,a+n+1); for (i=n;i>=1;i--) q1[++t1]=a[i]; h1=1;h2=1;h3=1; for(i=1;i<=m;i++) { int noww=findmax(i-1); if (i==x*t){x++;printf("%d ",noww);} int a1=floor((int)noww*p),a2=noww-a1; q2[++t2]=max(a1,a2)-i*qq; q3[++t3]=min(a1,a2)-i*qq; } printf("\n"); x=1; for (i=1;i<=n+m;i++) { int noww=findmax(m); if (i==x*t) {x++;printf("%d ",noww);} } }
D2T3:愤怒的小鸟
相关文章推荐
- CCF全国信息学奥林匹克联赛(NOIP2016)复赛模拟提高组 day2 解题报告
- NOIP2016提高组复赛赛后总结
- NOIP2016提高组复赛day2 组合数问题
- NOIP2016 提高组 复赛 day1 toy 玩具谜题
- NOIP2016提高A组模拟9.17 总结
- 2016.10.5【NOIP2016提高A组五校联考2】总结
- NOIP2016提高组 第一天第三题 换教室 classroom 题解
- 愤怒的小鸟(NOIP2016提高组Day2T3)
- 【NOIP2016提高组复赛day2】天天爱跑步
- C++ & Pascal——NOIP2016提高组day2 t3——愤怒的小鸟
- NOIP2014 提高组 复赛 day1 rps 生活大爆炸版石头剪刀布
- NOIP2008 提高组 复赛 word 笨小猴
- NOIP 1999 提高组 复赛 拦截导弹
- NOIP 2011 提高组 复赛 day2 factor 计算系数
- NOIP 2002 提高组 复赛 字串变换
- 鼎纹【NOIP2016提高A组模拟9.7】
- NOIP2015复赛提高组day1(A:神奇的幻方 B:信息传递 C:斗地主)
- CCF-NOIP-2018 提高组(复赛) 模拟试题(三)
- 洛谷-乘积最大-NOIP2000提高组复赛
- 想找 NOIP 提高组 复赛 在线测评网站