题目链接 http://acm.zju.edu.cn/onlinejudge/showContestProblems.do?contestId=378

没有solution的题目待补

A

暴力

无技巧

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int debug_num=0;
#define debug cout<<"debug "<<++debug_num<<" :"const int inf=2e9+10;const int maxn=1e5+10;int a[maxn];int main()
{//freopen("in.txt","r",stdin);ios::sync_with_stdio(false);int t;cin>>t;while(t--){int n;cin>>n;for(int i=0;i<n;++i)cin>>a[i];int maxx=a[0];int ans=0;for(int i=1;i<n;++i){if(a[i]>maxx){maxx=a[i];ans=i;}}if(ans==0||ans==n-1) cout<<"No"<<endl;else{int flag=1;for(int i=0;i<ans;++i){if(a[i]>=a[i+1]) {cout<<"No"<<endl;flag=0;break;}}if(flag==0) continue;for(int i=ans;i<n-1;++i){if(a[i]<=a[i+1]) {cout<<"No"<<endl;flag=0;break;}}if(flag) cout<<"Yes"<<endl;}}return 0;
}

B

做差,用数组做桶计数

注意做个差值shift,使得下标在合适区间

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int debug_num=0;
#define debug cout<<"debug "<<++debug_num<<" :"const int maxn=1e5+10;int n;int a[maxn];
int b[maxn];
int c[maxn*4];int main()
{//freopen("in.txt","r",stdin);ios::sync_with_stdio(false);int t;cin>>t;while(t--){memset(c,0,sizeof(c));int n;cin>>n;for(int i=0;i<n;++i){cin>>a[i];}for(int i=0;i<n;++i){cin>>b[i];}for(int i=0;i<n;++i){c[a[i]+(int)2e5-b[i]]++;}sort(c,c+4*maxn);cout<<c[4*maxn-1]<<endl;}return 0;
}

C

D

E

F

∑1≤i≤n⌊ai⌈logpai⌉⌋∑1≤i≤n⌊ai⌈logp⁡ai⌉⌋

\sum\limits_{1 \le i \le n}\Bigl\lfloor \frac{a_i}{\lceil\log_{p}a_i\rceil}\Bigr\rfloor

观察上式,当p最小,a最大时,分母取值最大,为30。

对a数组进行sort,之后可将a分段,最多30段,每一段都除以相同的数值

如何分段呢?二分

分好段后,需要快速求得段内除以这个数的下取整和值

对sort后的a数组预处理前缀和即可,由于除数最大30,要开30维

时间复杂度 O(m∗logn∗logamaxp+nlogn)O(m∗logn∗logpamax+nlogn)O(m * logn * log_p^{a_{max}}+nlogn) 其中mmm为查询次数,logn" role="presentation">lognlognlogn为每一次二分的复杂度,logamaxplogpamax log_p^{a_{max}}为二分次数。 nlognnlognnlogn为一次排序的复杂度

数据量超过1e6使用快读是个好习惯

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int debug_num=0;
#define debug cout<<"debug "<<++debug_num<<" :"
const int mod=1e9;const int maxn=5e5+10;int read()
{char ch='*';while(!isdigit(ch=getchar()));//不是数字读掉int num=ch-'0';while(isdigit(ch=getchar())) num=num*10+ch-'0';return num;
}int pre[31][maxn];
int a[maxn];
int p[maxn];
int n,m;void init()
{//求出pre /1,/2,/30的前缀和//memset(pre,0,sizeof(pre));for(int chu=1;chu<=30;++chu){pre[chu][0]=0;}for(int chu=1;chu<=30;++chu){for(int i=1;i<=n;++i){pre[chu][i]=(pre[chu][i-1]+a[i]/chu)%mod;}}
}int main()
{//freopen("in.txt","r",stdin);int t;scanf("%d",&t);while(t--){//cin>>n>>m;//n个数字   m个p//cout<<n<<" "<<m<<endl;scanf("%d %d",&n,&m);for(int i=1;i<=n;++i) a[i]=read();for(int i=1;i<=m;++i) p[i]=read();
//        for(int i=1;i<=n;++i) cin>>a[i];
//        for(int i=1;i<=m;++i) cin>>p[i];//debug<<"*****************"<<endl;ll ans=0;sort(a+1,a+1+n);init();
//        for(int i=1;i<=n;++i){//            cout<<a[i]<<" ";
//        }
//        cout<<endl;for(int i=1;i<=m;++i){//对于每个询问  log 的底数为p[i]//debug<<"第"<<i<<"次询问:"<<endl;ll sum=0;//除1的在 1~p 之间//除2的在p+1 ~p^2 之间//...//除30的在p^29+1 ~ p^30ll now_p=p[i];int id1=1;//id1左边界 id2右边界int id2;int chu=1;while(1){id2=upper_bound(a+1+(id1-1),a+1+n,now_p)-a-1;//返回小于等于now_p的最后一个数//debug<<"id1 id2 now_p chu   "<<id1<<" "<<id2<<" "<<now_p<<" "<<chu<<endl;if(id2>=id1) sum=(sum+pre[chu][id2]-pre[chu][id1-1]+mod)%mod;//,cout<<"***"<<pre[chu][id2]-pre[chu][id1-1]<<endlid1=id2+1;//下一次的左边界一定是上一次右边界的下一个now_p=now_p*p[i];chu++;if(id2>=n) break;}ans=(ans+((i*sum)%mod))%mod;}printf("%lld\n",ans);}return 0;
}

G

H

I

一定可以产生n(n−1)/2n(n−1)/2n(n-1)/2 个点

策略如下图,分情况讨论即可

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int debug_num=0;
#define debug cout<<"debug "<<++debug_num<<" :"int main()
{//freopen("in.txt","r",stdin);ios::sync_with_stdio(false);int t;cin>>t;while(t--){int n;cin>>n;if(n%2==0){for(int i=0;i<=n-3;++i){if(i%2==0){cout<<i<<" "<<2*n-2-i-1<<" ";}else cout<<i<<" "<<2*n-2-i+1<<" ";}cout<<n-2<<" "<<n<<" ";cout<<n-1<<" "<<2*n-1<<endl;}else{//奇数//0~n-1for(int i=0;i<=n-2;++i){if(i%2==0){cout<<i<<" "<<2*n-2-i-1<<" ";}else cout<<i<<" "<<2*n-2-i+1<<" ";}cout<<n-1<<" "<<2*n-1<<endl;}}return 0;
}

J

贪心

考虑只要能将所有宝贝数量恰好分半到两个组即可。因为一旦这件事能完成,男女性别一定不是问题,题目说明可以有组为空

下面考虑如何将宝贝恰好分半

首先当n%4==1||2n%4==1||2n\%4==1||2 的 时候一定无解

当n%4==0n%4==0n\%4==0时,很好分两半,即首位依次配对

当n%4==3n%4==3n\%4==3 时,对于前面一样做,对于最后三个人,价值分别为n-2,n-1,n

将n-2和n两个人分到有(n-1)/2的那组去

将(n-1)/2换到另外一组,n-1也放到该组即可

if写了100多行 太丑了

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int debug_num=0;
#define debug cout<<"debug "<<++debug_num<<" :"const int maxn=1e5+10;char ans[maxn];char s[maxn];int main()
{//freopen("in.txt","r",stdin);ios::sync_with_stdio(false);int t;cin>>t;while(t--){memset(ans,0,sizeof(ans));memset(s,0,sizeof(s));int n;cin>>n;for(int i=1;i<=n;++i){cin>>s[i];}if(n%4==1||n%4==2){cout<<-1<<endl;continue;}if(n%4==0){for(int i=1;i<=n;++i){if(i%4==0||i%4==1){if(s[i]=='1'){ans[i]='3';}else{ans[i]='1';}}else{if(s[i]=='1'){ans[i]='4';}else{ans[i]='2';}}}for(int i=1;i<=n;++i){cout<<ans[i];}cout<<endl;}else{if(n<4){//cout<<n<<"***"<<endl;if(s[1]=='1') ans[1]='3';else ans[1]='1';if(s[2]=='1') ans[2]='3';else ans[2]='1';if(s[3]=='1') ans[3]='4';else ans[3]='2';for(int i=1;i<=n;++i){cout<<ans[i];}cout<<endl;}else{int ahu=0;for(int i=1;i<=n-3;++i){if(i==(n-1)/2) ahu=(n-1)/2;if(i%4==0||i%4==1){if(s[i]=='1'){ans[i]='3';}else{ans[i]='1';}}else{if(s[i]=='1'){ans[i]='4';}else{ans[i]='2';}}}//ahu是特殊元素if(ahu%4==0||ahu%4==1){//这种情况ahu现在被放在1,3 ,将其改为2,4if(s[ahu]=='1') ans[ahu]='4';else ans[ahu]='2';if(s[n-1]=='1') ans[n-1]='4';else ans[n-1]='2';if(s[n-2]=='1') ans[n-2]='3';else ans[n-2]='1';if(s[n]=='1') ans[n]='3';else ans[n]='1';}else{//这种情况ahu现在被放在2,4,将其改为1,3if(s[ahu]=='1') ans[ahu]='3';else ans[ahu]='1';if(s[n-1]=='1') ans[n-1]='3';else ans[n-1]='1';if(s[n-2]=='1') ans[n-2]='4';else ans[n-2]='2';if(s[n]=='1') ans[n]='4';else ans[n]='2';}for(int i=1;i<=n;++i){cout<<ans[i];}cout<<endl;}}}return 0;
}

K

L

水题

无技巧

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int debug_num=0;
#define debug cout<<"debug "<<++debug_num<<" :"const int maxn=200;struct node{string s;ll v;
}no[maxn];bool cmp(node a,node b)
{if(a.v==b.v) return a.s<b.s;return a.v>b.v;
}int main()
{//freopen("in.txt","r",stdin);ios::sync_with_stdio(false);int t;cin>>t;while(t--){int n,m;cin>>n>>m;for(int i=0;i<n;++i){cin>>no[i].s>>no[i].v;}sort(no,no+n,cmp);
//        for(int i=0;i<n;++i){//            cout<<no[i].s<<" "<<no[i].v<<endl;
//        }ll sum=0;ll tp=m;for(int i=0;i<m;++i){//cout<<no[i].s<<" ";sum+=tp*no[i].v;tp--;}cout<<sum<<" ";for(int i=0;i<m;++i){if(i==m-1) cout<<no[i].s<<endl;else cout<<no[i].s<<" ";}}return 0;
}

M

水题

无技巧

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int debug_num=0;
#define debug cout<<"debug "<<++debug_num<<" :"int main()
{//freopen("in.txt","r",stdin);ios::sync_with_stdio(false);int t;cin>>t;while(t--){int n,b;cin>>n>>b;int flag=0;for(int i=0;i<n;++i){int tp;cin>>tp;if((tp+b)%7==0){flag=1;}}if(flag){cout<<"Yes"<<endl;}else cout<<"No"<<endl;}return 0;
}

2018浙江第十五届ACM省赛题解(待补完)相关推荐

  1. 第十五届智能车赛比赛 比赛组织参考文档

    第十五届全国大学生智能车竞赛 比赛组织参考文档 作者:卓晴博士 全国大学生智能车竞赛秘书处 2020-07-27 Monday 2020年由于全球新冠肺炎大流行的影响,使得第十五届智能车竞赛在组织比赛 ...

  2. 南华大学第十五届ACM程序设计竞赛(重现赛) E 免费机票

    链接:https://ac.nowcoder.com/acm/contest/699/E 来源:牛客网 题目描述 某华大学小飞中奖了!!!奖品是一张免费飞机票,唯一遗憾的是,这张飞机票有限定区间,需要 ...

  3. 免费机票【SPFA】【南华大学第十五届ACM程序设计竞赛】

    题目链接 题目描述 某华大学小飞中奖了!!!奖品是一张免费飞机票,唯一遗憾的是,这张飞机票有限定区间,需要从k个区间中选择其一.小飞打算高高兴兴的出去玩啦,但是,从s地出发,去往e地,可能没有直达的飞 ...

  4. 南华大学第十五届ACM程序设计竞赛(重现赛)E 免费机票(单边最短路)

    题目链接 题目描述 某华大学小飞中奖了!!!奖品是一张免费飞机票,唯一遗憾的是,这张飞机票有限定区间,需要从k个区间中选择其一.小飞打算高高兴兴的出去玩啦,但是,从s地出发,去往e地,可能没有直达的飞 ...

  5. 长沙理工大学第十五届程序设计竞赛部分题解

    校赛都过去了几天了才想起来写博客 老懒狗了 这次感觉算一点点超常发挥 出了七题 排在第八名 还拿了两个一血气球 虽然之后发现有道题暴力就能过 但是还是挺开心的 而且这次比yy他们队还高一名 哈哈哈哈 ...

  6. 第十五届全国大学生智能汽车竞赛线上比赛流程规范

    第十五届全国大学生智能汽车竞赛 线上比赛流程规范 作者:卓晴博士,清华大学自动化系 更新时间:2020-08-03 Monday ■ 简述   第十五届 全国大学生智能汽车竞赛 由于受到 新冠病毒(C ...

  7. 第十五届全国大学生智能车全国总决赛获奖信息-浙江赛区

    第十五届全国大学生智能车竞赛 全国总决赛获奖信息 浙江赛区 序号 学校 队伍 组别 奖项 姓名 类别 1 杭州电子科技大学 杭电竞速一队 基础四轮组 一等奖 孙桐 参赛学生 2 杭州电子科技大学 杭电 ...

  8. 2020年第十五届全国大学生智能汽车竞赛浙江赛区比赛成绩分析

    8月10日,第十五届全国大学生智能汽车竞赛首场比赛(浙江赛区)在浙大城市学院风雨操场拉开帷幕. ▲ 智能车竞赛浙江赛区比赛现场 经过两天鏖战比赛,来自省内34所大学(含本科.独立学院.高职院校)的17 ...

  9. 第十五届全国大学生智能车竞赛浙江赛区隆重开幕

    第十五届全国大学生智能汽车竞赛 全国组委会主任李少远教授讲话稿 各位组委会委员.各位专家.各位老师.各位同学: 大家上午好! 我代表智能汽车竞赛全国组委会向浙江省赛区组委会,向省赛的承办单位,向所有支 ...

最新文章

  1. 假如时光倒流,你依然会变成现在的你
  2. 用 Python 画圣诞树的 N 种玩法
  3. 微型激光投影廉价版本
  4. android图库文件夹乱,防止文件夹包含在Android图库中 | MOS86
  5. HTTP(S)协议详解
  6. 多站合一音乐搜索神器网站源码
  7. linux mysql2013_linux下MySQL安装
  8. jq事件不自执行方法
  9. java8 Lambda Stream collect Collectors 常用实例
  10. 免费帝国CMS发布插件
  11. cygwin下使用apt-cyg安装新软件
  12. 如何使用Joplin搭建私有笔记软件
  13. CKPlayer视频地址加密方法
  14. 浦发银行c语言上机试题,浦发银行通信技术类招考笔试经验
  15. cache line大小
  16. python3.7豆瓣 post 数据(一)
  17. 内存读数据和磁盘读数据的区别
  18. 如何用CANSLIM法则选股
  19. Python读取键盘输入到一维列表及二维列表
  20. 图解Java多线程设计模式——Java多线程基础

热门文章

  1. C#调用百度云存储接口上传文件
  2. 什么是带宽?宽带独享?共享?
  3. 一年之内融资两轮、签单数千万,这家公司怎么做到的?
  4. macbook 无法加入网络
  5. 计算机培训都有哪些方向,计算机培训什么方向比较好
  6. WebRTC 之点对点连接——浏览器
  7. 【NOI2019模拟2019.6.27】幻化成风(集合容斥系数,胡乱dp)
  8. 【3dsmax】20180904基础知识整理(3)
  9. 门户通专访马克斯创始人周涛:教你轻松做电影站
  10. 根据QQ头像hash分析QQ号(html版)