给CSDN竞赛的建议
1、希望多出一些原创题目、本次四道题目基本都是非原创题目,增加了作弊的可能性
2、可以模仿Leetcode周赛,设置固定的比赛结束时间,能够一定程度上遏制多账号提交作弊的情况
3、希望考试难度呈现梯度式、适当防AK、增加区分度
祝贵站竞赛越办越好~
CSDN周赛29题解
订班服
小A班级订班服了! 可是小A是个小糊涂鬼,整错了好多人的衣服的大小。 小A只能自己掏钱包来补钱了。 小A想知道自己至少需要买多少件衣服。
#include <bits/stdc++.h>
using namespace std;
int a[10], b[10];
int main()
{
int n;
cin >> n;
string s;
for (int i = 1; i <= n; ++i) {
cin >> s;
if (s == "M") a[1] ++;
else if (s == "S") a[2]++;
else if (s == "XL") a[3]++;
else if (s == "XLL") a[4]++;
else if (s == "XLLL") a[5]++;
else if (s == "XLLLL") a[6]++;
else if (s == "XLLLLL") a[7]++;
else if (s == "L") a[8]++;
}
for (int i = 1; i <= n; ++i) {
cin >> s;
if (s == "M") b[1] ++;
else if (s == "S") b[2]++;
else if (s == "XL") b[3]++;
else if (s == "XLL") b[4]++;
else if (s == "XLLL") b[5]++;
else if (s == "XLLLL") b[6]++;
else if (s == "XLLLLL") b[7]++;
else if (s == "L") b[8]++;
}
int res = 0;
for (int i = 1; i <= 8; ++i) {
if (a[i] > b[i]) res += (a[i] - b[i]);
}
cout << res << endl;
return 0;
}
抓糖豆
抓糖豆,小Q与小K都喜欢吃糖豆。 但是糖豆分两种,超甜糖豆和普通糖豆。 现在有w个超甜糖豆和b个普通糖豆。 小Q和小K开始吃糖豆,他们决定谁先吃到超甜糖豆谁就获胜。 小K每次吃的时候会捏碎一颗糖豆。 小Q先吃,小Q想知道自己获胜的概率。 如果两个人都吃不到超甜糖豆小K获胜。
#include<iostream>
#include<cstdio>
using namespace std;
double dp[1010][1010];
int main()
{
int w, b;
cin >> w >> b;
for (int i = 1; i <= w; ++i) dp[i][0] = 1;
for (int i = 0; i <= b; ++i) dp[0][b] = 0;
for (int i = 1; i <= w; ++i) {
for (int j = 0; j <= b; ++j) {
dp[i][j] = (double)i / (i + j);
if (j >= 2) dp[i][j] += ((double)j / (i + j) * (j - 1) / (i + j - 1) * i / (i + j - 2) * dp[i - 1][j - 2]);
if (j >= 3) dp[i][j] += ((double)j / (i + j) * (j - 1) / (i + j - 1) * (j - 2) / (i + j - 2) * dp[i][j - 3]);
}
}
printf("%0.9lf", dp[w][b]);
return 0;
}
走楼梯
现在有一截楼梯,根据你的腿长,你一次能走 1 级或 2 级楼梯,已知你要走 n 级楼梯才能走到你的目的楼层,请实现一个方法,计算你走到目的楼层的方案数。
#include <bits/stdc++.h>
using namespace std;
int dp[100];
int main()
{
int n;
cin >> n;
dp[1] = 1, dp[2] = 2;
for (int i = 3; i <= n; ++i) {
dp[i] = dp[i - 1] + dp[i - 2];
}
cout << dp[n];
}
打家劫舍
一个小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。
#include <bits/stdc++.h>
using namespace std;
int dp[110][2], w[110];
int main()
{
int n;
cin >> n;
for (int i = 1; i <= n; ++i) cin >> w[i];
for (int i = 1; i <= n; ++i) {
dp[i][1] = dp[i - 1][0] + w[i];
dp[i][0] = max(dp[i - 1][1], dp[i - 1][0]);
}
cout << max(dp[n][1], dp[n][0]);
return 0;
}