链接:牛客小白月赛75_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ (nowcoder.com)
1.上班
阿宁每天在马路对面等大巴,坐大巴到小山路西。到小山路西后,阿宁可以选择走路或者等班车,去到公司上班。
已知阿宁坐大巴到小山路西需要x分钟。从小山路西走路到公司需要y分钟;从小山路西坐班车到公司需要z分钟。
问阿宁最少需要花费多少分钟到公司?
- #include <iostream>
- using namespace std;
- int main()
- {
- int x, y, z;
- cin >> x >> y >> z;
- int a = x + y;
- int b = x + z;
- if(a > b) cout << b << endl;
- else cout << a << endl;
- return 0;
- }
题解:理解题目意识后就是直接的相加比大小求最小值
2.崇拜
现在蒜同学打算给阿宁讲解n个知识点,第iii个知识点的难度值是ai。
对于一个难度值小于x的知识点,蒜同学讲解完后,阿宁就会觉得太简单了,阿宁对蒜同学的崇拜值减1。
对于一个难度值大于y的知识点,蒜同学讲解完后,阿宁就会觉得太难了,简直就是对阿宁弹琴,阿宁对蒜同学的崇拜值加3。
初始阿宁对蒜同学崇拜值是0。蒜同学打算找到一个知识点讲解顺序,最大化讲解过程的最大崇拜值。
问,这个最大崇拜值是多少?
- #include <iostream>
- #include <algorithm>
- using namespace std;
- const int N = 2e5 + 10;
- int n, x, y;
- int a[N];
- int main()
- {
- cin >> n >> x >> y;
- for(int i = 0; i < n; i++) cin >> a[i];
- int sum = 0;
- sort(a, a + n);
- for(int i = n - 1; i >= 0; i--){
- if(a[i] > y) sum += 3;
- }
- cout << sum << endl;
- return 0;
- }
题解:这道题要求的是按一定顺序找到最大的崇拜值,那么顺序无要求的话我们自然就可以想到进行排序从而得到最大的崇拜值
3.方豆子
阿宁最近对吃豆子感兴趣,阿宁想要用程序输出一下,但是图形化对于阿宁来说太难。因此他决定用字符,并且是方形的模样。
给一个正整数n,输出n级好豆子。
#include<iostream>
#include<cstring>
#include<vector>
using namespace std;
int main()
{
int n;
cin>>n;
vector<string>a, b;
a.push_back("******");
a.push_back("******");
a.push_back("******");
a.push_back("***...");
a.push_back("***...");
a.push_back("***...");
b.push_back("......");
b.push_back("......");
b.push_back("......");
b.push_back("...***");
b.push_back("...***");
b.push_back("...***");
for(int i = 2; i <= n; i ++)
{
vector<string>x, y;
for(int j = 0; j < a.size(); j ++)
{
x.push_back(b[j] + b[j]);
y.push_back(a[j] + a[j]);
}
for(int j = 0; j < a.size(); j ++)
{
x.push_back(b[j] + a[j]);
y.push_back(a[j] + b[j]);
}
a = x;
b = y;
}
for(int i = 0; i < a.size(); i ++)
{
cout<<a[i]<<endl;
}
return 0;
}
思路:这道题运用了类似于动态规划的方法。将每一级的好坏方豆子都给表示了出来,然后得到题目所要求的方豆子。这样就不需要考虑其他的因素了。
我在做的时候是将这些分成了奇数方豆子和偶数方豆子来做,这无疑会增加工作量,并且要考虑的东西也会更多,所以寄了。