- 题解
2023算法AC编程挑战赛
- 2023-11-17 14:37:13 @
A
签到题,注意题目数据范围 1≤A,B≤50000,开long long
。
#include <bits/stdc++.h>
using namespace std;
int main()
{
long long a, b;
cin >> a >> b;
cout << a * b << endl;
return 0;
}
B
签到题,没什么可说的。
#include <bits/stdc++.h>
using namespace std;
int main()
{
double n, bike, walk;
cin >> n;
bike = 27 + 23 + n / 3;
walk = n / 1.2;
if(bike == walk) cout << "All" << endl;
else if(bike > walk) cout << "Walk" << endl;
else cout << "Bike" << endl;
return 0;
}
C
数组作业题,找到最大值,按要求枚举求和即可。
#include <bits/stdc++.h>
using namespace std;
int a[110];
int n, maxn = -0x3f3f3f3f, s;
int main()
{
cin >> n;
for (int i = 0; i < n; i ++ ) cin >> a[i];
for (int i = 0; i < n; i ++ )
if (a[i] > maxn)
maxn = a[i];
for (int i = 0; i < n; i ++ )
if (a[i] != maxn)
s += a[i];
cout << s << endl;
return 0;
}
D
算法:模拟
开对应变量记录值的变化,循环表示天数变化。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int m, k, now, cnt, ans;
cin >> m >> k;
now = m; // 当前钱数
cnt = 0; // 已经花了的钱数
ans = 0; // 答案天数
while (now > 0)
{
now -- ;
cnt ++ ;
ans ++ ;
if (cnt % k == 0)
now ++ ;
}
cout << ans << endl;
return 0;
}
E
NOIP2015普及组
算法:枚举,模拟
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
int res = 0;
for (int i = 1, k = 0; k < n; i ++ )
for (int j = 0; j < i && k < n; j ++, k ++ )
res += i;
cout << res << endl;
return 0;
}
F
NOIP2016普及组
算法:枚举、模拟
由于老师只能买一种包装的铅笔,因此直接枚举买哪种包装,然后求出最少需要买多少包,才能使总数量不少于 n 即可。其中 n 是老师需要买的铅笔总数。
假设当前枚举的包装中的铅笔是 s 个,则最少需要买 ⌈n / s⌉=⌊(n+s−1) / s⌋ 包。
时间复杂度
每种包装枚举一次,因此时间复杂度是 O(m),其中 m 是包装总数。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
scanf("%d", &n);
int res = 1e9;
for (int i = 0; i < 3; i ++ )
{
int s, p;
scanf("%d%d", &s, &p);
res = min(res, (n + s - 1) / s * p);
}
printf("%d\n", res);
return 0;
}
2 comments
-
Eva LV 6 @ 2023-11-17 17:28:26
#include <bits/stdc++.h> using namespace std; int main () { int n,a,c=0,b=0; cin >> n; while (n--) { cin >> a; if (a > b) b = a; c = c+a; } cout << c-b << endl; return 0; }
第3题,用总和减去最大值
-
2023-11-17 17:25:30@
老师为什么不出HelloWorld
- 1