比赛链接:这里

目录

  • OP
  • A 股神
    • 思路
    • 代码
  • B 酒馆决斗
    • 思路
    • 代码
  • C 求 k 整除最大元素和
    • 思路
    • 代码
  • D 取快递
    • 思路
    • 代码
  • 数组与指令
    • 题目描述
  • F 幸运数字
    • 思路
    • 代码
  • G 有限小数
    • 思路
    • 代码
  • H 子数组和
    • 思路
    • 代码
  • ED

OP

E的知识点好像需要补,赛时想到的都爆TLE

A 股神

贪心 / DP

思路

朴素的贪心思想:

次日若比此日股价高,且没有买入,则所有金币买入;
次日若比此日股价低,且有买入,则全部卖出;

注意输出时转换成金币输出;
注意浮点误差;
注意第0天也可以进行买入操作。

DP方法可以参考ph大佬的题解。

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll M=1e9+7;
const int INF=0x3f3f3f3f;int main()
{double gp[502],w=1,g=0;int n,i;cin>>n;for(i=1;i<=n;i++)scanf("%lf",&gp[i]);gp[0]=1;//第0天股价for(i=0;i<n;i++){if(g==0){if(gp[i+1]>gp[i]){g=w/gp[i];w=0;}}else{if(gp[i+1]<gp[i]){w=g*gp[i];g=0;}}}if(g>0)w+=g*gp[n];//转换为金币,防浮点误差printf("%.2lf",w);return 0;
}

B 酒馆决斗

模拟

思路

排序后进行模拟,注意每次出招都有可能造成对方减员,而不是每回合;

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll M=1e9+7;
const int INF=0x3f3f3f3f;struct qd
{int a,b;}qua[100005],shp[100005];
bool cmp(qd x,qd y)//排序
{if(x.a==y.a)return x.b>y.b;return x.a>y.a;
}
int main()
{int n,m,i,j;cin>>n>>m;for(i=1;i<=n;i++)scanf("%d%d",&qua[i].a,&qua[i].b);for(i=1;i<=m;i++)scanf("%d%d",&shp[i].a,&shp[i].b);sort(qua+1,qua+1+n,cmp);sort(shp+1,shp+1+m,cmp);i=j=1;for(;i<=n&&j<=m;){shp[j].b-=qua[i].a;if(shp[j].b<=0)j++;if(j>m)break;qua[i].b-=shp[j].a;if(qua[i].b<=0)i++;}if(i<=n)printf("Quasrain");else printf("SHP");printf(" wins, left ");printf("%d",max(m-j+1,n-i+1));return 0;
}

C 求 k 整除最大元素和

DP

思路

建立dp方程 d p [ i ] [ j ] = m a x ( d p [ i − 1 ] [ ( j − g % k + k ) % k ] + g , d p [ i − 1 ] [ j ] ) dp[i][j]=max(dp[i-1][(j-g\%k+k)\%k]+g,dp[i-1][j]) dp[i][j]=max(dp[i−1][(j−g%k+k)%k]+g,dp[i−1][j]), d p [ i ] [ j ] dp[i][j] dp[i][j]代表有前 i 个数时, m o d ( k ) = j mod( k) = j mod(k)=j 时的最大和;

[ ( j − g % k + k ) % k ] [(j-g\%k+k)\%k] [(j−g%k+k)%k]是为了防止计算后的余数变负或溢出;

赛时没找到简单的压缩至一维dp的方法(实际上应该有),而开[102][100005]会MLE;
因为处理 [i] 时只需要 [i] 与 [i-1] 行数数据;
所以通过开 [2][100005] ,并在 [1] 每一行处理完后,将数据更新[0]内,以节省内存;

数据最大和为1e14,可以放心大胆地用 ll 进行dp;

注意dp初始值的设定。

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll M=19260817,N=1e9+9;
const int INF=0x3f3f3f3f;ll dp[2][102]={0};
int main()
{int n,k,i,j,g;cin>>n>>k;for(i=1;i<k;i++)dp[0][i]=-1e14-1;//初值for(i=1;i<=n;i++){scanf("%d",&g);for(j=0;j<k;j++){dp[1][j]=max(dp[0][(j-g%k+k)%k]+g,dp[0][j]);}for(j=0;j<k;j++)//更新数据至dp[0]{dp[0][j]=dp[1][j];}}printf("%lld",(dp[0][0])>0?dp[0][0]%M:0);return 0;
}

D 取快递

贪心

思路

以a为排序依据,降序排列;

从用时最长的开始,直至超能力时间和大于该快递用时,或该快递的超能力用时大于标准用时时,跳出贪心;

跳出后比较标准用时与超能力用时和的最大值输出。

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll M=1e9+7;
const int INF=0x3f3f3f3f;struct qd
{int a,b;}qdb[100005];//快递表
bool cmp(qd x,qd y)
{if(x.a==x.b)return x.b<y.b;return x.a<y.a;
}
int main()
{int n,i,j,tb=0;cin>>n;for(i=1;i<=n;i++)scanf("%d%d",&qdb[i].a,&qdb[i].b);sort(qdb+1,qdb+1+n,cmp);for(i=n;i>=1;i--){if(qdb[i].b>qdb[i].a)break;//此快递超能力用时大于标准用时else{if(tb+qdb[i].b<=qdb[i].a)tb+=qdb[i].b;else break;//超能力取此快递前超能力用时和大于此快递标准用时}if(tb>=qdb[i].a)break;//超能力取此快递后超能力用时和大于此快递标准用时}printf("%d",max(tb,qdb[i].a));return 0;
}

数组与指令

原题被删除了,在这里大概描述一下:

题目描述

有一长度为n的数组,初始值全为0,现对其进行m此操作:
每次操作遵循op a b的输入形式

若op为1,则对第a位的数加b;
若op为2,则输出数组[a,b]区间上的非零数个数;
若op为3,则输出数组[a,b]区间上数字之和;

输入共m+1行,第一行输入n,m;
接下来m行输入m次操作;

对于每一次操作2或操作3,输出一行答案;

数据范围:
1 < = n < = 1 e 9 1<=n<=1e9 1<=n<=1e9
1 < = m < = 1 e 5 1<=m<=1e5 1<=m<=1e5
o p ∈ { 1 , 2 , 3 } op\in\{1,2,3\} op∈{1,2,3}
1 < = a < = b < = 1 e 9 1<=a<=b<=1e9 1<=a<=b<=1e9

大概是这个样的,目前还没什么好想法。

F 幸运数字

暴力模拟

思路

暴力模拟即可。

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll M=1e9+7;
const int INF=0x3f3f3f3f;int main()
{int m,i,j,ans=0;cin>>m;for(i=1;i<=m;i++){int sum=0;j=i;while(j){sum+=j%10;j/=10;}if(i%sum==1)ans++;}cout<<ans;return 0;
}

G 有限小数

进制转换

思路

可以参考浮点数进制转换;

我先将获得的A进制数转换为10进制,再进行处理,方便操作与理解。

对于进制转换,我们可以不关心转换成的B进制数具体是什么,只关心是否有剩余;

所以我们就可以暴力地进行足够多位的转换,直接看结果是否有剩余即可。

关于进一步优化可以参考ph大佬的题解。
PS:ph大佬在进制转换的字符串遍历方向错了的情况下依然过掉了9/10,%%%。

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll M=19260817,N=1e9+9;
const int INF=0x3f3f3f3f;ll ctoten(string& n,ll a)//change to ten
{//cout<<n<<endl;ll ans=0,ma=1;for(int i=n.length()-1;i>=0;i--){ans+=(n[i]>='0'&&n[i]<='9')?(n[i]-'0')*ma:(n[i]-'A'+10)*ma;ma*=a;}//printf("%lld\n",ans);return ans;
}
int main()
{ll a,b,nu,nd,i;//numberup,numberdownstring up,down;cin>>up>>down>>a>>b;nu=ctoten(up,a);nd=ctoten(down,a);if(nu>=nd)nu-=nd;//printf("%lld %lld\n",nu,nd);for(i=1;i<=10000000;i++)//1e7位{nu*=b;nu%=nd;}if(!nu)printf("Yes");//分子为0即无剩余else printf("No");return 0;
}

H 子数组和

滑窗

思路

从右界累加至和不小于 k ,再从左界累减至不大于k;

若此时和值为k,则输出左右界;
否则即再执行上面的操作;

若遍历完都没有和为k的情况,则输出-1;

注意处理边界。

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll M=1e9+7;
const int INF=0x3f3f3f3f;int main()
{ll n,a[1003],k,i,j,sum;cin>>n>>k;for(i=1;i<=n;i++)scanf("%lld",&a[i]);i=1,j=0,sum=0;for(;i<=n&&j<=n;){while(sum<k&&j<=n)j++,sum+=a[j];//移动右界while(sum>k&&i<=n)sum-=a[i],i++;//移动左界if(sum==k)break;}if(j==n+1||i==n+1)printf("-1");//边界溢出则无子数组满足条件else printf("%lld %lld",i,j);return 0;
}

ED

码字较急,难免有疏漏与错误,欢迎评论区讨论与反馈。

2021年东北林业大学蓝桥杯选拔赛(软件类)(A B C D F G H)相关推荐

  1. 2021第十二届蓝桥杯大赛软件赛省赛C++ C组真题题解

    ============================== 2019-2021蓝桥杯C++ C组真题题解: 2019第十届蓝桥杯大赛软件类省赛C++ C组真题题解 2020第十一届蓝桥杯大赛软件类省 ...

  2. 2019第十届蓝桥杯大赛软件类省赛C++ C组真题题解

    ============================== 2019-2021蓝桥杯C++ C组真题题解: 2019第十届蓝桥杯大赛软件类省赛C++ C组真题题解 2020第十一届蓝桥杯大赛软件类省 ...

  3. 2019第十届蓝桥杯大赛软件类省赛C++ B组真题题解

    ========================================== 2019-2021蓝桥杯C++ B组真题题解: 2019第十届蓝桥杯大赛软件类省赛C++ B组真题题解 2020第 ...

  4. 2020年10月蓝桥杯(软件类)省赛:题目+解答

    由于今年疫情原因,原本定在4月份的省赛,被推迟到了7月和10月,分两次举行,参赛选手任意选择一场比赛即可.这次分享的是10月分举行的第二场省赛的赛题和解答.后面我会持续更新历年的真题和解答,喜欢的小伙 ...

  5. 第九届蓝桥杯大赛软件类国赛

    文章目录 第九届蓝桥杯大赛软件类国赛 国赛C++ A组 三角形面积 阅兵方阵 找假币 约瑟夫环 -- important 自描述序列 -- todo 采油 -- todo 国赛C++ B组 换零钞 激 ...

  6. 第十一届蓝桥杯大赛软件类决赛(C/C++ 大学A组)

    蓝桥杯 2020年国赛真题 C/C++ 大学A组 试题 A: 合数个数 试题 B: 含 2 天数 试题 C: 本质上升序列 试题 D: 咫尺天涯 试题 E: 玩具蛇 试题 F: 皮亚诺曲线距离 试题 ...

  7. 2022年第十三届蓝桥杯大赛软件类决赛C/C++/Java/Python真题

    1.2022年第十三届蓝桥杯大赛软件类决赛C/C++大学A组真题 2022年第十三届蓝桥杯大赛软件类决赛C/C++大学A组真题 - 题库 - C语言网 2. 2022年第十三届蓝桥杯大赛软件类决赛C/ ...

  8. 第十一届蓝桥杯大赛软件类决赛(2020javaB国赛)

    第十一届蓝桥杯大赛软件类决赛 Java 大 学 B 组 目录 第十一届蓝桥杯大赛软件类决赛 试题 A: 美丽的 2 试题 B: 扩散 试题 C: 阶乘约数 试题 D: 本质上升序列 试题 E: 玩具蛇 ...

  9. 2018第九届蓝桥杯大赛软件类B组C/C++省赛题解

    2018第九届蓝桥杯大赛软件类B组C/C++省赛目录 试题 A:第几天(结果填空) 试题 B:明码(结果填空) 试题 C:乘积尾0(结果填空) 试题 D:测试次数(结果填空) 试题 E:快速排序(结果 ...

最新文章

  1. Vim的行号、语法显示等设置(.vimrc文件的配置)以及乱码解决
  2. 设置Mybatis(3.2.8)实体嵌套关系(一对多,多对多)遇到的问题及经验总结记录...
  3. 源码安装 odoo12 -- 问题记录
  4. 事务的控制(保存点)
  5. C语言第六次作业指针,c语言第六次作业解析
  6. LeetCode 350. 两个数组的交集 II(哈希)
  7. 戴尔r720服务器增加内存,dell r720服务器加了一根内存后,开机显示configuring memory,卡在这里进不了系统,请问这是什么情况?...
  8. ecshop二次开发 给商品添加自定义字段【包含我自己进一步的开发实例详解】
  9. Linux死锁检测-Lockdep
  10. 电商峰值系统架构设计--转载
  11. 测试员一份工作坚持多久跳槽,才能完美提升薪资?
  12. vue项目引用QRCode生成二维码扫码实现app登录
  13. 赛微微电子通过注册:拟募资8亿 年营收3.4亿
  14. 腾讯云的ping检测
  15. 跳槽的新公司,我直接让项目的性能提升了一半
  16. WebServerException: Unable to start embedded Tomcat
  17. 立可得_第1章_物联网亿万级通信一站式解决方案EMQ
  18. Windows XP Professional SP3安装版
  19. PHP使用自带的ZipArchive类,实现压缩文件目录
  20. 天地否 (易經大意 韓長庚)

热门文章

  1. JPK Data Processing修改默认路径
  2. 从MAC到Windows家庭版远程访问配置
  3. 学习Fidder和willow
  4. 浅谈freopen用法
  5. awk单引号和双引号区别注意
  6. 俄罗斯计算机游戏公司,俄罗斯人推荐影响世界的六款游戏,你玩过吗?
  7. 深度卷积对抗生成网络DCGAN论文解读
  8. 智能手表音频特性测试_看了一圈儿童电话手表 性价比之王就它了
  9. 2023实验室装修设计十大要点,附注意事项和流程
  10. 添加公司信息-公司宣传型小程序源代码下载1-视频教程24