传送门:SWJTUOJ

A题

Bob每次最多走一格,最多走300步,而起始位置在0~300之间,所以最多也就走到600这样子,那么只需要记录最低600位就可以了。

每次乘的时候,时间复杂度为:

其中n最多为600,然后因为要乘300次,总操作次数大约为300*300*600,约为5e7,不会TLE,而每次乘完之后判断是否有位置可以给Bob容身即可。

AC码如下:

#include <bits/stdc++.h>
#define int long long
#define pii pair<int,int>
#define mii map<int,int>
#define vi vector<int>
#define vvi vector<vector<int>>
#define lowbit(x) ((x)&-(x))
const int mod=1e9+7;
const int maxn=1e6+3;
using namespace std;
int n,m,T;
bool fff=true;
vector<bool>safe(605,false);
vector<bool>num0(605,0);
void init()
{num0[0]=1;cin>>m;safe[m]=true;
}
void solve()
{string str;cin>>str;vector<int>num1(605,0);for(int i=0;i<str.size();i++){if(str[str.size()-i-1]=='1'){for(int j=0;i+j<605;j++)num1[i+j]+=num0[j];}}for(int i=0;i<604;i++){num1[i+1]+=(num1[i]>>1);num1[i]&=1;}bool flag=false;vector<bool>safenext(605,false);for(int i=0;i<605;i++){if(num1[i]||num0[i])continue;if(safe[i+1]||safe[i]||(i>0&&safe[i-1]))flag=safenext[i]=true;}safe=safenext;for(int i=0;i<604;i++)num0[i]=num1[i];num0[604]=num1[604]&1;fff=flag;return ;
}signed main()
{cin>>T;init();while(T--&&fff)solve();if(fff)cout<<'Y';elsecout<<'N';return 0;
}

B题

因为有绝对值不等式

所以

当且仅当

时成立,

保证不等式的等号成立的同时,还要保证被剪掉的部分尽可能小,于是只能取c为数组的中位数,且a1和an分别为不超过c的最大数和不低于c的最小数(可以有一个和c相同),显然当数组个数为奇数的时,需要特殊判断一下,取哪个数为c才能令另一个数与c距离最近。

AC码如下:

#include <bits/stdc++.h>
#define int long long
#define pii pair<int,int>
#define mii map<int,int>
#define vi vector<int>
#define vvi vector<vector<int>>
#define lowbit(x) ((x)&-(x))
const int mod=1e9+7;
const int maxn=1e6+3;
using namespace std;
int n,m,T;void init()
{}#include <bits/stdc++.h>
#define int long long
#define pii pair<int,int>
#define mii map<int,int>
#define vi vector<int>
#define vvi vector<vector<int>>
#define lowbit(x) ((x)&-(x))
const int mod=1e9+7;
const int maxn=1e6+3;
using namespace std;
int n,m,T;void solve()
{cin>>n;vector<int>a(n);for(int i=0;i<n;i++)cin>>a[i];sort(a.begin(),a.end());int base=a[n/2];int ans=0;for(int i=0;i<n/2;i++)ans+=abs(a[i]-base)*2;for(int i=n/2+1;i<n;i++)ans+=abs(a[i]-base)*2;if(n&1)ans-=min(abs(base-a[n/2-1]),abs(base-a[n/2+1]));elseans-=abs(base-a[n/2-1]);cout<<ans;
}signed main()
{T=1;init();while(T--)solve();return 0;
}void solve()
{cin>>n;vector<int>a(n);for(int i=0;i<n;i++)cin>>a[i];sort(a.begin(),a.end());int base=a[n/2];int ans=0;for(int i=0;i<n/2;i++)ans+=abs(a[i]-base)*2;for(int i=n/2+1;i<n;i++)ans+=abs(a[i]-base)*2;if(n&1)ans-=min(abs(base-a[n/2-1]),abs(base-a[n/2+1]));elseans-=abs(base-a[n/2-1]);cout<<ans;
}signed main()
{T=1;init();while(T--)solve();return 0;
}

C题

枚举两数之差,发现若差为奇数q,则只有形如a=(k+1)q,b=kq的ab满足(a+b)|(a-b),若差为偶数p,则只有形如a=(k+1)p,b=kp和形如a=(k+1.5)p,b=(k+0.5)p的ab满足(a+b)|(a-b)。

所以可以先统计每个数出现的次数,然后枚举两数之差,在统计好的数组中查询形如上述的ab,当枚举两数之差为x时,需要遍历的次数为1e6/x,总时间复杂度为

AC码如下:

#include <bits/stdc++.h>
#define int long long
#define pii pair<int,int>
#define mii map<int,int>
#define vi vector<int>
#define vvi vector<vector<int>>
#define lowbit(x) ((x)&-(x))
const int mod=1e9+7;
const int maxn=1e6+3;
using namespace std;
int n,m,T;signed main()
{ios::sync_with_stdio(false);cout.tie(0);cin>>n;vector<int>a(1000003);int buf;for(int i=0;i<n;i++){cin>>buf;a[buf]++;}int ans=0;for(int i=1;i<=1000000;i++){if(i&1)for(int j=i;j<=1000000;j+=i){if(j+i>1000000)break;else ans+=a[j]*a[i+j];}else for(int j=i>>1;j<=1000000;j+=(i>>1)){if(j+i>1000000)break;else ans+=a[j]*a[i+j];}}cout<<ans;return 0;
}

D题

这是宋老板放的一道郑老板都表示不会的钓鱼题,网上的假题解链接如下:

swjtucpc—嘉然今天吃什么_qq_41251052的博客-CSDN博客

我们会在第一时间查找所有有错误代码的提交,并且给予他delete的奖励。

具体这道题该怎么写, 可以参考假题解中的连接,自行学习一下,英朗表示真的不会无能为力了。

E题

这是宋老板送给大家的签到题,需要在ksm函数最末尾加一句

return z;

然后倒数第四行加个分号就能AC了,你有没有成功AC呢?

这道题也可以自己写,但是时间可能会很长,郑老板贴心的把判题时间调的比较长,以鼓励自己写FFT的同学。

F题

这道题主要考察堆栈的用法,并且部分同时使用cin和cout的同学可能过不了,当当前元素与栈顶元素可以配对时,就弹出,否则就入栈(不配对的元素不参与这个过程)即可,当识别到不能入栈且不能配对的元素。最终若字符串读完时,栈不空就说明字符串不合法,否则字符串合法。

STD码如下:

#include<bits/stdc++.h>
#define cc char,char
#define c char
using namespace std;
const int maxn=5e6+3;string vs[]={"()","{}","[]","/\\","<>","pq","bd"};
string sa(" !^*-_+=|:.\'\"AHIMOTUVWXYilovwx08");set<c>s1,s2;//s1存前键s2存自对称
map<cc> mp;
void init()
{for(int i=0;i<sa.size();i++)s2.insert(sa[i]);for(int i=0;i<7;i++){c m=min(vs[i][0],vs[i][1]);c M=max(vs[i][0],vs[i][1]);s1.insert(m);mp.insert(pair<cc>(M,m));}
}char str[5000003];void solve()
{stack <c> s;cin.getline(str,5000003,'\n');int i=0;do{char ch=str[iif(!s.empty()&&s.top()=='\''){if(ch=='\'')s.pop();}else if(s2.find(ch)!=s2.end()){if(!s.empty()&&s.top()==ch)s.pop();elses.push(ch);}else if(s1.find(ch)!=s1.end())s.push(ch);else if(mp.find(ch)!=mp.end()){if(!s.empty()&&s.top()!=mp[ch]){printf("N\n");return ;}s.pop();}}while(str[++i]!='\0');printf("%c\n",s.empty()?'Y':'N');
}int main()
{init();int T;scanf("%d",&T);getchar();while(T--)solve();
}

G题

将一个大数分开成a*8+b*9+c*10的形式。

首先,任何一个数都可以写成n*8+k的形式,其中n是整数,k是小于8的整数。

9可以看做8+1,10可以看做8+2,那么让k全部分给前边的n个8,前边的n个8最多接收2n,所以当k>2n的时候无解,应输出-1。

随后随意分解k使满足题意即可。

AC码如下:

#include <bits/stdc++.h>
#define int long long
#define pii pair<int,int>
#define mii map<int,int>
#define vi vector<int>
#define vvi vector<vector<int>>
#define lowbit(x) ((x)&-(x))
const int mod=1e9+7;
const int maxn=1e6+3;
using namespace std;
int n,m,T;
void solve()
{int n;cin>>n;int cnt=n/8;if(n-cnt*8>cnt*2){cout<<-1<<endl;return ;}int last=n-cnt*8;int c=last/2;int b=last&1;int a=cnt-b-c;cout<<a<<' '<<b<<' '<<c<<endl;
}signed main()
{cin>>T;init();while(T--)solve();return 0;
}

H题

显然,应该选取架子上左右两边的高达模型,但是在统计距离和的时候,应该要有所优化地统计,直接二维暴利枚举会TLE

AC码如下:

#include <bits/stdc++.h>
#define int long long
#define pii pair<int,int>
#define mii map<int,int>
#define vi vector<int>
#define vvi vector<vector<int>>
#define lowbit(x) ((x)&-(x))
const int mod=1e9+7;
const int maxn=1e6+3;
using namespace std;
int n,m,T;
vi a;signed main()
{cin>>n>>m;a.resize(n);for(int i=0;i<n;i++)cin>>a[i];sort(a.begin(),a.end());int l=0,r=n-1;int ans=0;while(m>>1){ans+=(m-1)*(a[r]-a[l]);m-=2;l++;r--;}cout<<ans;return 0;
}

I题

用平方时间复杂度枚举两行,两行做按位与运算,统计运算后1的个数,就可以算出这两行中,有多少对数作为列可以构成四环。时间复杂度为三次方,可能会被卡常

AC码如下:

#include <bits/stdc++.h>
#define pii pair<int,int>
#define mii map<int,int>
#define vi vector<int>
#define vvi vector<vector<int>>
#define lowbit(x) ((x)&-(x))
const int mod=1e9+7;
const int maxn=1e6+3;
using namespace std;
bool a[1000][1000];
int n,m,T;signed main()
{ios::sync_with_stdio(false);cout.tie(0);cin>>n;for(int i=0;i<n;i++){string str;cin>>str;for(int j=0;j<n;j++){if(str[j]=='1')a[i][j]=true;}}long long ans=0;for(int i=0;i<n;i++){for(int j=i+1;j<n;j++){int cnt=0;for(int k=0;k<n;k++)cnt+=(a[i][k]&a[j][k]);ans+=(cnt*(cnt-1)/2);}}cout<<ans;return 0;
}

林湾村男子铁路技术职业学院2022年5月ACM校赛初赛题解相关推荐

  1. 中国计量大学现代科技学院第四届“中竞杯”程序设计校赛(同步赛)F.爬塔

    中国计量大学现代科技学院第四届"中竞杯"程序设计校赛(同步赛)F.爬塔 题目链接 题目描述 高川最喜欢的游戏当属 Slay the Spire,这是一款爬塔游戏,你需要从一座塔的底 ...

  2. Cortex-M3技术参考手册 2022年3月1日

    1. Cortex-M3 Technical Reference Manual (TRM) (Cortex-M3技术参考手册) 请从www.arm.com/documentation/ARMProce ...

  3. 网络优化(中国计量大学现代科技学院第三届“中竞杯”程序设计校赛(网络赛))

    题意: <梦三国2>是一款3D MOBA类网游.游戏继承<梦三国>的三国文化背景和基础玩法,并加入许多全新地图和全新竞技玩法.由于人气高,游戏在线人数与日俱增,我们知道当在线人 ...

  4. 中国计量大学现代科技学院第四届“中竞杯”程序设计校赛(同步赛) F.爬塔(DP)

    题目链接:https://ac.nowcoder.com/acm/contest/9680/F 题目描述: 高川最喜欢的游戏当属 Slay the Spire,这是一款爬塔游戏,你需要从一座塔的底部一 ...

  5. 20170416郑州市轻工业学院ACM校赛

    这是个星期天,但是,这种非一线城市,重点城市什么的高中,放假从来不按套路出牌,几乎可以说能给你一天是福气.当然,比县里好的多,问在县里上高中的初中同学,放假更是比我们一天里的午休+晚上吃饭时间还要少. ...

  6. 哈尔滨理工大学软件与微电子学院程序设计竞赛(19级新生赛)——题解

    注:所有题目不要求多组输入 索引: A. 小乐乐学编程 B. 小乐乐算平均分 C. 小乐乐找最大数 D. 小乐乐是否被叫家长 E. 小乐乐转换成绩 F. 小乐乐算多少人被请家长 G. 小乐乐算最高分 ...

  7. 温州科技职业学院 计算机网络技术,浙江【温州科技职业学院】_计算机网络技术专业建设方案.doc...

    浙江[温州科技职业学院]_计算机网络技术专业建设方案 PAGE PAGE 34 计算机网络技术专业建设方案 温州科技职业学院 2011年10月 目 录 TOC \o "1-1" \ ...

  8. php 五级联动,重庆文化艺术职业学院 常规教学五级联动督查工作机制

    重庆文化艺术职业学院 常规教学五级联动督查工作机制 为提高教育教学质量,学院决定推行常规教学五级联动督查工作机制,具体安排如下: 一.目的 通过实施联动督查工作机制,强化常规教学管理,规范学生日常行为 ...

  9. 河南林业职业技术学院计算机专业校企合作,河南林业职业学院2016年校企合作方案...

    原标题:河南林业职业学院2016年校企合作方案 河南林业职业学院2016年校企合作方案 校企汇10年致力于帮助企业与学校开展校企合作.联合办学.共建专业.教育投资.订单培养.冠名办班.设立大学生创业基 ...

最新文章

  1. Codeigniter设计和架构目标
  2. 从 Zero 到 Hero ,一文掌握 Python--转
  3. Task Runner Explorer for vs2015找不到啊
  4. C#Winform怎么让控件随着主界面大小变化
  5. java用log.i打印数组_java-使用JSCH将ssh日志打印到列表(android)
  6. Java 源程序与编译型运行区别
  7. c# 模拟登陆 webbrowser 抓取_《VR+电力——更换绝缘子培训》已登陆Pico Neo 2
  8. 微软拆分操作系统的计划初现雏形
  9. 摘抄一篇:图的存储结构
  10. Web API-DOM事件高级
  11. 【2021牛客暑期多校训练营5】Jewels(建图,最小匹配权,KM乱搞)
  12. Java应用服务器对比:TomcatJettyGlassFishWildFly
  13. Print 与Debug.Log的区别
  14. 京东广告受众基础属性预估
  15. 计算机桌面无法解锁,电脑win10系统锁屏后解锁却无法进入桌面的解决方法
  16. 关于华为P10(Android 8.0系统)出现的一个莫名奇妙的ANR
  17. 苹果4怎么越狱_来看iPhone迁移怎么用 除iOS12.4苹果还为旧款设备推送了更新
  18. 计算机实验室教师岗位职责,实验室实验教师岗位职责
  19. 全网独家!!!全网首发!!!iOS 16降级15.5或15.6白苹果,完美救砖保数据教程,白苹果有救了~
  20. 2013.02.13——笔记

热门文章

  1. matlab中使用VMD(变分模态分解)
  2. 多智能体强化学习-MADDPG
  3. 如何在CSDN上赚钱:CSDN收益渠道分析
  4. 计蒜客难题题库之一 泥塑课 python解答
  5. 项目管理~下属没有充分信任管理者的行为表现
  6. 在Docker中使用Dockerfile实现ISO文件转化为完整版Centos镜像,并搭建集群数据仓库
  7. matlab平面电磁波入射_厘清平面波、TE(M)波、TE(M)极化、极化几个概念
  8. 传雅虎11月中将裁员 杨致远地位或将不保
  9. Python学习笔记_01
  10. TensorFlow2 | 并联神经网络-例子