感觉难度比去年大,也可能是我变菜了

第一场

1001迷失

传送门

1003 鸽子

传送门

1004 萌新

void solve(){ll a=read,b=read;if(b>a) swap(a,b);ll tmp=a-b;ll res_max=a-b,res_min=0;if(!tmp) res_max=a,res_min=2;rep(i,2,tmp/i){if(tmp%i==0){res_min=i;break;}}if(!res_min) res_min=tmp;if(res_min<=1||res_max<=1){printf("-1 -1\n");return ;}printf("%lld %lld\n",res_min,res_max);
}int main(){int _=read;while(_--) solve();return 0;
}

1006 毒瘤数据结构题

  • 思路:
    首先对于查询操作,是满足单调性的,我们可以二分答案,那么怎么checkcheckcheck呢,如果对于当前的midmidmid,[1,mid−1][1,mid-1][1,mid−1]的和为mid−1mid-1mid−1,说明该点符合题意,还可以更大,lll指针右移。
    对于修改操作,相当于单点修改。
    大体思路就是对答案进行二分,借用某数据结构维护单点修改和区间求和。
    容易想到的是线段树跟树状数组,赛时是用树状数组写的,复杂度O(nlog2n)O(nlog^{2}n)O(nlog2n)
    交了后宇巨说第二个查询的答案一定是单调递增的,所以应该有O(n)O(n)O(n)的写法。

    然后hduojhduojhduoj评测机的问题导致O(n)O(n)O(n)的写法都会TLETLETLE,知道思想就好了。
  • 代码:
const int maxn=5e6+7,maxm=210000;ll n,a[maxn],tr[maxn];ll lowbit(ll x){return x&-x;
}void update(ll pos,ll val){while(pos<=n){tr[pos]+=val;pos+=lowbit(pos);}
}ll query(ll pos){ll res=0;while(pos){res+=tr[pos];pos-=lowbit(pos);}return res;
}bool check(int x){int t=query(x-1);if(t!=x-1) return 0;return 1;
}int main(){n=read;    rep(i,1,n){int op=read,x=read;if(op==1&&a[x]!=1) a[x]=1,update(x,1);else if(op==2){//rep(j,1,n){//    cout<<a[j]<<" ";//}//puts("");if(a[x]!=1) update(x,1);int l=1,r=n,res;while(l<=r){int mid=(l+r)/2;if(check(mid)){res=mid;l=mid+1;}else r=mid-1;}//cout<<i<<"******";printf("%d\n",res);if(a[x]!=1) update(x,-1);}}   return 0;
}

1008 猎人杀

  • 思路:
    模拟;要注意的点为:
    1.1.1.狼人可以杀死自己,猎人不可以杀死自己
    2.2.2.注意每次杀人的时候都是选择最靠前并且未死亡的,所以每次要从111开始遍历
  • 代码:
int a[55],now[55],st[55];
int w[55][55];
int main(){int _=read;while(_--){int n=read,pos;rep(i,1,n){a[i]=read;if(a[i]) pos=i;now[i]=1;st[i]=0;}rep(i,1,n){rep(j,1,n){w[i][j]=read;}}int cnt=n;int id=pos,flag=0;while(1){now[id]=1;while(now[id]<=n&&st[w[id][now[id]]]) now[id]++;st[w[id][now[id]]]=1;// dieint t=w[id][now[id]];//cout<<now[id]<<"*****"<<t<<endl;if(t==pos){flag=1;break;}else{id=t;cnt--;}if(cnt<=2){flag=0;break;}}if(flag) puts("lieren");else puts("langren");}return 0;
}

第二场

1001 签到

  • 思路
    找规律,写出前777项就好了
项数 a b
0 a b
1 a+b a-b
2 2a 2b
3 2a+2b 2a-2b
4 4a 4b
5 4a+4b 4a-4b
6 8a 8b
7 8a+8b 8a-8b

分奇偶讨论一下就好了,注意取模。

  • 代码:
const ll mod=998244353 ;
int main(){int _=read;while(_--){ll a=read,b=read,k=read;if(k%2==0){int t=k/2;ll tmp=ksm(2,t,mod);printf("%lld %lld\n",tmp*a%mod,tmp*b%mod);}else{int t=(k-1)/2;ll tmp=ksm(2,t,mod);ll x=(a-b+mod)%mod;printf("%lld %lld\n",tmp*(a+b)%mod,tmp*x%mod);}} return 0;
}

1002 随机题意

  • 思路:
    对于每个b[i]b[i]b[i]的范围为[ai−k,ai+k][a_{i}-k,a_{i}+k][ai​−k,ai​+k]
    排序后从头开始扫,贪心的选择。
    每次都尽量选择每个区间最左边的。
  • 代码:
int n,a[maxn],k;
struct node{int l,r;
}b[maxn];
bool cmp(node a,node b){if(a.l==b.l) return a.r<b.r;return a.l<b.l;
}
int main(){int _=read;while(_--){n=read,k=read;rep(i,1,n){a[i]=read;b[i].l=a[i]-k,b[i].r=a[i]+k;}sort(b+1,b+1+n,cmp);int res=1,now=b[1].l+1;rep(i,2,n){if(now<=b[i].r){now=max(now+1,b[i].l+1);res++;}}printf("%d\n",res);}return 0;
}

1003 魔怔

传送门

1004 净化

  • 思路:
    首先,尽量找到分界点,在分界点之后,所有的负数都不会使得遍历完的答案减少,也就是说,分界点之后的每次的变化都是固定的,设为cntcntcnt。
    其次,如果这时候已经满足x>=mx>=mx>=m,就输出答案;不满足的话,就计算出每次增加cntcntcnt,直至x>=mx>=mx>=m的次数。
    但是这样会出现一个问题,有可能在某次遍历的过程中,x>=mx>=mx>=m已经满足了,但是后面有负数,就导致了这次遍历完成后,x>=mx>=mx>=m又不满足了,这样就使得答案增大。
    解决方案是提前记录前缀和的最大值,在计算每次增加cntcntcnt增加多少次能够满足x>=mx>=mx>=m的时候,提前将最大值减去。
  • 代码:
const int maxn=1e5+7,maxm=210000;
ll n,m,a[maxn];
int main(){int _=read;while(_--){n=read,m=read;ll sum=0,maxx=-inf;rep(i,1,n) a[i]=read,sum+=a[i],maxx=max(maxx,sum);ll x=0,res=0,lasx=0,cnt=0,lascnt=-1;while(1){rep(i,1,n){x=max(0ll,x+a[i]);if(x>=m) break;}res++;if(x>=m) break;cnt=x-lasx;if(lascnt==cnt) break;lascnt=cnt,lasx=x;}if(x>=m) printf("%lld\n",res);else{if(cnt==0){puts("-1");continue;}if(maxx==cnt){ll t=m-x;res+=t/cnt;if(t%cnt) res++;printf("%lld\n",res);}else{ll t=m-x-maxx;//cout<<t<<" "<<cnt<<" "<<res<<endl;res+=t/cnt+1;//cout<<t/cnt<<endl;if(t%cnt) res++;printf("%lld\n",res);}}} return 0;
}

2021 年百度之星·程序设计大赛 - 初赛一、二相关推荐

  1. 2021 年百度之星·程序设计大赛 - 初赛二 1001 签到(找规律,快速幂)

    solution 找规律 #include <iostream> #include <algorithm>using namespace std;const int mod = ...

  2. 2021 年百度之星·程序设计大赛 - 初赛二 1003 魔怔(并查集,联通性,欧拉回路)

    problem solution 发现除了起点和终点,剩下所有点周围的边都会被恰经过偶数次,所以这些点初始连向了偶数条白边. 考虑由白边连接形成的图,每个连通块中度数为奇数的点一定为偶数个. 所以起点 ...

  3. 2021 年百度之星·程序设计大赛 - 初赛二 1005 水题(贪心结论)

    problem solution 开始还以为是CF987E,但是奇偶性并不一样,,结果是个贪心乱搞..样例都没过交了能过,醉了. #include<bits/stdc++.h> using ...

  4. 2021 年百度之星·程序设计大赛 - 初赛二 1002 随机题意(区间贪心)

    problem 随机题意 Accepts: 1411 Submissions: 3641 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32 ...

  5. 2021 年百度之星·程序设计大赛 - 初赛一 1001 :迷失(DP+Floyd快速幂优化)

    迷失 Accepts: 221 Submissions: 1479 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 ...

  6. 2021 年百度之星·程序设计大赛 - 初赛一(1006/毒瘤数据结构题)

    原题跳转 树状数组记录前 i 项1的个数,当前缀和query(i) == i时,说明前 i 项满足要求, 对于op == 1的情况,如果对应位置为0(sum[i] - sum[i - 1] == 0) ...

  7. HDU 6114 Chess 【组合数】(2017百度之星程序设计大赛 - 初赛(B))

    Chess Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  8. hdu6383(2018 “百度之星”程序设计大赛 - 初赛(B))

    p1m2 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Sub ...

  9. hdu6380(2018 “百度之星”程序设计大赛 - 初赛(B))

    degree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total S ...

  10. hdu6375(2018 “百度之星”程序设计大赛 - 初赛(A))

    度度熊学队列 Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total S ...

最新文章

  1. java switch 表达式_尝鲜Java 12新特性:switch表达式
  2. 吴恩达团队发起X射线AI诊断竞赛,这家中国公司登上了榜首
  3. python没有英文基础能学吗-学python需要英语基础吗
  4. 德州寒流对IDC带来极大影响
  5. 启动outlook时报错:mapi无法加载信息服务msncon.dll
  6. idea启动tomcat时蓝屏
  7. zookeeper专题:zookeeper集群搭建和客户端连接
  8. 太赞了!智能语音技术年终报告:谢磊教授、王赟博士、罗艺博士…
  9. 在linux下,为php增加mbstring扩展
  10. Arcview GIS应用与开发技术(12)-3D分析
  11. 三菱梯形图转换c语言软件,三菱PLC编程软件的梯形图程序的生成与编辑
  12. 稳压二极管真的可以稳压吗?
  13. 如何在手机上查看APP原型
  14. SQL语句的增删改查(详细)
  15. 中二青年付杰的逆袭故事:从二本生到 ICLR 杰出论文奖,我用了20年
  16. 微信开发JS接口安全域名 网页授权域名 业务域名
  17. 笔记本电脑应用商店服务器错误,Windows10系统无法打开这个应用商店解决方法
  18. word 手动双面打印设置
  19. 用Nonebot2搭建QQ机器人(一):我的学习经历(一)
  20. NLP入门之综述阅读-自然语言处理发展及应用综述

热门文章

  1. cad汉仪长仿宋体_工程制图国标字体“长仿宋体”下载
  2. 中国高校那些不为人知的秘密,你听说过吗?
  3. 医疗器械软件质量体系等
  4. 分享个大厂PRD模板
  5. Unity基础UI框架
  6. 附合导线坐标计算例题_附合导线计算例题步骤
  7. 机器人动力学与控制学习笔记(二)————机器人动力学建模
  8. 各种loading加载中gif图标
  9. 计算机如何取消自动关机,怎么解除电脑自动关机
  10. FGUI GTween 完成事件不回调的问题