百度之星2019 初赛一 题解
1001 Polynomial:若第一个多项式的次数大于第二个,就是1/0,若小于就是0/1,若等于就是第一个多项式最高次项系数/第二个多项式最高次项系数。
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #define rep(i,l,r) for (int i=(l); i<=(r); i++) 5 typedef long long ll; 6 using namespace std; 7 8 const int N=10010; 9 int T,n,f[N],g[N]; 10 11 int main(){ 12 freopen("a.in","r",stdin); 13 freopen("a.out","w",stdout); 14 for (scanf("%d",&T); T--; ){ 15 scanf("%d",&n); int s1=n-1,s2=n-1; 16 rep(i,0,n) f[i]=g[i]=0; 17 rep(i,0,n-1) scanf("%d",&f[i]); 18 rep(i,0,n-1) scanf("%d",&g[i]); 19 while (!f[s1]) s1--; 20 while (!g[s2]) s2--; 21 if (s1>s2){ puts("1/0"); continue; } 22 if (s1<s2){ puts("0/1"); continue; } 23 int d=__gcd(f[s1],g[s2]); printf("%d/%d\n",f[s1]/d,g[s2]/d); 24 } 25 return 0; 26 }
1001
1002 Game:做法很多,下面是我的做法。
首先起点一定在某个区间端点上,枚举起点。然后每次需要做的就是,计算从目前位置到下一个区间最少需要多少步。这个直接就是当前位置到下一个区间的较近端点的距离/2上取整,唯一需要考虑的是最后一步是走一格还是两格。这时找到这两个位置分别最多到之后哪个区间为止都不需要移动,若不同则选择更靠后的那个。若相同则计算到那个区间的距离,取较小的那个。
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #define rep(i,l,r) for (int i=(l); i<=(r); i++) 5 typedef long long ll; 6 using namespace std; 7 8 const int N=100010,inf=1e9; 9 int T,n,a[N],l[N],r[N],L[N],R[N],L1[N],R1[N],L2[N],R2[N]; 10 11 int main(){ 12 freopen("b.in","r",stdin); 13 freopen("b.out","w",stdout); 14 for (scanf("%d",&T); T--; ){ 15 scanf("%d",&n); int tot=0,ans=inf; 16 rep(i,1,n) scanf("%d%d",&l[i],&r[i]),a[++tot]=l[i],a[++tot]=r[i],L1[i]=R1[i]=L2[i]=R2[i]=n+1; 17 rep(i,1,n-1){ 18 rep(j,i+1,n){ 19 if (l[j]>l[i]){ L[i]=1; L1[i]=j; break; } 20 if (r[j]<l[i]){ L[i]=0; L1[i]=j; break; } 21 } 22 rep(j,i+1,n){ 23 if (r[j]<r[i]){ R[i]=1; R1[i]=j; break; } 24 if (l[j]>r[i]){ R[i]=0; R1[i]=j; break; } 25 } 26 rep(j,i+1,n) if (l[j]>l[i]+1 || r[j]<l[i]+1){ L2[i]=j; break; } 27 rep(j,i+1,n) if (l[j]>r[i]-1 || r[j]<r[i]-1){ R2[i]=j; break; } 28 } 29 rep(i,1,tot){ 30 int x=a[i],res=0; 31 rep(j,1,n){ 32 if (l[j]<=x && r[j]>=x) continue; 33 if (l[j]>x){ 34 res+=(l[j]-x+1)/2; 35 if ((l[j]-x)&1 && j<n && r[j]>l[j]){ if (L2[j]>=L1[j] && L[j]) x=l[j]+1; else x=l[j]; } else x=l[j]; 36 }else{ 37 res+=(x-r[j]+1)/2; 38 if ((x-r[j])&1 && j<n && r[j]>l[j]){ if (R2[j]>=R1[j] && R[j]) x=r[j]-1; else x=r[j]; } else x=r[j]; 39 } 40 } 41 ans=min(ans,res); 42 } 43 printf("%d\n",ans); 44 } 45 return 0; 46 }
1002
1003 Mindis:离散化连边后跑最短路。
1 #include<queue> 2 #include<vector> 3 #include<cstdio> 4 #include<cstring> 5 #include<algorithm> 6 #define rep(i,l,r) for (int i=(l); i<=(r); i++) 7 using namespace std; 8 9 const int N=200010,M=410; 10 double d[N]; 11 bool b[N]; 12 int T,n,xs,ys,xe,ye,xc,yc,xa[N],xb[N],ya[N],yb[N],xx[N],yy[N],ax[M][M],ay[M][M]; 13 struct P{ int x; double d; }; 14 bool operator <(const P &a,const P &b){ return a.d>b.d; } 15 vector<P>a[N]; 16 priority_queue<P>Q; 17 18 int main(){ 19 freopen("d.in","r",stdin); 20 freopen("d.out","w",stdout); 21 for (scanf("%d",&T); T--; ){ 22 scanf("%d",&n); xc=yc=0; 23 memset(ax,0,sizeof(ax)); memset(ay,0,sizeof(ay)); memset(b,0,sizeof(b)); 24 rep(i,1,n){ 25 scanf("%d%d%d%d",&xa[i],&ya[i],&xb[i],&yb[i]); 26 xx[++xc]=xa[i]; xx[++xc]=xb[i]; yy[++yc]=ya[i]; yy[++yc]=yb[i]; 27 } 28 scanf("%d%d%d%d",&xs,&ys,&xe,&ye); 29 xx[++xc]=xs; xx[++xc]=xe; yy[++yc]=ys; yy[++yc]=ye; 30 sort(xx+1,xx+xc+1); sort(yy+1,yy+yc+1); 31 xc=unique(xx,xx+xc+1)-xx-1; yc=unique(yy,yy+yc+1)-yy-1; 32 rep(i,1,xc*yc) a[i].clear(); 33 rep(i,1,n){ 34 xa[i]=lower_bound(xx+1,xx+xc+1,xa[i])-xx; 35 xb[i]=lower_bound(xx+1,xx+xc+1,xb[i])-xx; 36 ya[i]=lower_bound(yy+1,yy+yc+1,ya[i])-yy; 37 yb[i]=lower_bound(yy+1,yy+yc+1,yb[i])-yy; 38 } 39 xs=lower_bound(xx+1,xx+xc+1,xs)-xx; xe=lower_bound(xx+1,xx+xc+1,xe)-xx; 40 ys=lower_bound(yy+1,yy+yc+1,ys)-yy; ye=lower_bound(yy+1,yy+yc+1,ye)-yy; 41 rep(i,1,n) rep(j,xa[i],xb[i]-1) rep(k,ya[i],yb[i]) ax[j][k]++; 42 rep(i,1,n) rep(j,xa[i],xb[i]) rep(k,ya[i],yb[i]-1) ay[j][k]++; 43 rep(i,1,xc) rep(j,1,yc-1){ 44 a[(i-1)*yc+j].push_back((P){(i-1)*yc+j+1,(yy[j+1]-yy[j])/(ay[i][j]+1.)}); 45 a[(i-1)*yc+j+1].push_back((P){(i-1)*yc+j,(yy[j+1]-yy[j])/(ay[i][j]+1.)}); 46 } 47 rep(i,1,xc-1) rep(j,1,yc){ 48 a[(i-1)*yc+j].push_back((P){i*yc+j,(xx[i+1]-xx[i])/(ax[i][j]+1.)}); 49 a[i*yc+j].push_back((P){(i-1)*yc+j,(xx[i+1]-xx[i])/(ax[i][j]+1.)}); 50 } 51 rep(i,1,xc*yc) d[i]=1e30; 52 d[(xs-1)*yc+ys]=0; Q.push((P){(xs-1)*yc+ys,d[(xs-1)*yc+ys]}); 53 while (Q.size()){ 54 int x=Q.top().x; Q.pop(); 55 if (b[x]) continue; b[x]=1; 56 for (int i=0; i<(int)a[x].size(); i++){ 57 P e=a[x][i]; 58 if (d[e.x]>d[x]+e.d) d[e.x]=d[x]+e.d,Q.push((P){e.x,d[e.x]}); 59 } 60 } 61 printf("%.5lf\n",d[(xe-1)*yc+ye]); 62 } 63 return 0; 64 }
1003
1005 Seq:打表找结论,具体见代码。
#include<cstdio> #include<cstring> #include<algorithm> #define rep(i,l,r) for (int i=(l); i<=(r); i++) typedef long long ll; using namespace std;int T; ll n;int main(){freopen("c.in","r",stdin);freopen("c.out","w",stdout);for (scanf("%d",&T); T--; ){scanf("%lld",&n);if (n%6==0 || n%6==2) printf("%lld\n",n/2);if (n%6==3 || n%6==5) printf("%lld\n",n/6);if (n%6==4) printf("%lld\n",n-1);if (n%6==1) printf("%lld\n",n/2+n/6+1);}return 0; }
1005
转载于:https://www.cnblogs.com/HocRiser/p/11372250.html
百度之星2019 初赛一 题解相关推荐
- 【百度之星2014~初赛(第二轮)解题报告】JZP Set
声明 笔者近期意外的发现 笔者的个人站点 http://tiankonguse.com/ 的非常多文章被其他站点转载,可是转载时未声明文章来源或參考自 http://tiankonguse.com/ ...
- 2020 年百度之星·程序设计大赛部分题解
目录 Dec Covid Car Intersection Dec 2020 年百度之星·程序设计大赛 - 初赛一 HUD 6745 题解: 线性DP:f(i,j) 表示从i开始减,从j开始减时互质 ...
- 百度之星2018初赛游记
第一场 觉得初赛大概很水,于是迟了半小时开题,发现许多人都a出了两题,顿觉不太对劲 精神状态不好,有点迷迷糊糊的,在A完最水的T1之后以为T2要splay,仔细观察发现就是个list 用stl没几行就 ...
- 百度之星2019决赛摸鱼记
前言 绝对不鸽 没有的事 我云岛主已经在路上了 Day0 一个人来到了北京 真的很冷. 举目无亲,然后认识了dcx大爷,大爷非常平易近人体验极佳 然后就在酒店快乐聊天睡觉,一觉睡到了欢迎晚宴.嗯.北京 ...
- 2020 年百度之星·程序设计大赛 · 官方题解汇总
1.测试赛 2.初赛一 留个备份,方便以后找 3.初赛二 4.初赛三 5.复赛
- 百度之星 2019 预赛三 A 最短路 1
题目链接 分析 异或运算满足「三角不等式」. $\forall a, b, c \in \mathbb{Z}_{\ge 0}$,有 $a \xor b \le (a \xor c) + (c \xor ...
- HDU - 6383 百度之星2018初赛B 1004 p1m2(二分答案)
p1m2 Accepts: 1003 Submissions: 4595 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072 ...
- 百度之星 2017初赛第一场 1005 今夕何夕
今夕何夕 Accepts: 1345 Submissions: 5533 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32 ...
- 2011百度之星初赛B圆环
这是百度之星2011初赛B中的第一道题,题目也很水,只要找到解题思路就OK了.. 题目: 时间限制:1000ms 描述 一个圆环上有n个位置,这n个位置按顺时针依次标号为1, 2, -, n.初始时圆 ...
最新文章
- 【算法设计】虎溪校园导游系统
- 如何用 Gitlab 做团队内的 Code Review
- window.parent,top,window.self,parent,opener
- 字符串使用与内部实现原理
- php的具体配置学习笔记
- NumPy数值计算库-1
- spring学习--JdbcTemplate-查询返回-批量操作
- sqlite3命令行把.db文件导成.txt时报错及中文乱码
- 笔记本电脑建立Wifi热点多种方法
- 电脑中毒,文件夹都变成exe文件怎么办?
- 国民岳父的“屁民理论”
- 树莓派 外接HDMI线显示屏分辨率设置
- 【寻找最佳小程序】02期:腾讯旅游首款小工具“旅行小账本”——创意及研发过程大起底
- Python3 粗略计算PI的值
- iframe标签控制视频大小及自动播放
- 最强大易用的开源MODBUS库-YMODBUS,包含MASTER/SLAVE
- 佳能eosr控制环能否计算机控制,EOS R有哪些隐藏功能
- 小白要搭建电商系统,看看这个开源项目!
- 关于焦点小组(Focus Group)访谈法
- 免费的在线文档翻译神器
热门文章
- Eclipse里代码自动完成 auto completion的快捷键设置
- SAP Fiori应用中事务锁的实现 - Transaction Lock实现机制
- SAP Customer Data Cloud的administrator设置
- Cloud Foundry Session Affinity(Sticky Session)的实现
- c 是泛型程序设计语言,c ++中的“泛型编程”是什么意思?
- mysql node null_node-mysql中防止SQL注入的方法总结
- Json字符串转对象,使用ObjectMapper方式报错:no String-argument constructor/factory method
- c语言整数与平均值,编写求一组整数的和与平均值的程序
- axure 倒计时_AxureRP教程—模拟倒计时
- mysql转sqlserver_mysql转sqlserver工具