A - 小A的文化节 (Nowcoder78306 A)
题目大意
将 n 个数中选定的数相加并输出。
解题思路
数据量很小只需int即可。
神奇的代码#include <bits/stdc++.h>
using namespace std;
using LL = long long;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, m;
cin >> n >> m;
int a[n];
for (int i = 0; i < n; i++) {
cin >> a[i];
}
int ans = 0;
for (int i = 0; i < m; i++) {
int x;
cin >> x;
ans += a[x - 1];
}
cout << ans;
return 0;
}
B - 小A的游戏 (Nowcoder78306 B)
题目大意
小A和小B在玩一个游戏,每局游戏的结果可能有胜平负三种。游戏的胜者得到 3 分,败者不得分,若打平则双方都得 1 分。
小A为 X 分,小B为 Y 分。请你来判断一下此时的比分是否合法吧。
解题思路
双方得分的差值一定是 3 的倍数,否则就不合法。
神奇的代码#include <bits/stdc++.h>
using namespace std;
using LL = long long;
void solve() {
int a, b;
cin >> a >> b;
int ans = abs(a - b);
if (ans % 3 == 0) {
cout << "Yes\n";
} else {
cout << "No\n";
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while (t--) {
solve();
}
return 0;
}
C - 小A的数字 (Nowcoder78306 C)
题目大意
小A给定一个数字 n ,请你帮她找出从低位对齐后任意一位均与 n 对应数位不同的最小正整数。
对于本题题面描述中的从低位对齐后任意一位均与 n 对应数位不同,你需要保证你所输出的答案的位数小于 n 的位数时,即使在添加前导零至与 n 的位数相同后,也不应有任意一位的数字两两相同。
解题思路
数字 n 从最高位开始遍历。如果该位为 0 则答案该位为 1 是最小的选择,相反如果该位不为 1 则答案该位为 0 。去除前导零。如果经过前面的判断后答案为 0 且 n 个位不为 1 答案就是 2,如果 n 个位不是 1 答案就是 1 。
神奇的代码#include <bits/stdc++.h>
using namespace std;
using LL = long long;
void solve() {
string s;
cin >> s;
string ans;
for (int i = 0; i < s.size(); i++) {
if (s[i] != '0' && i == 0) {
i++;
while (s[i] != '0' && i < s.size()) i++;
}
if (s[i] == '0') ans += '1';
else ans += '0';
}
if (ans == "0") {
if (s[s.size() - 1] == '1') ans = "2";
else ans = "1";
}
cout << ans << "\n";
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while (t--) {
solve();
}
return 0;
}
D - 小A的线段(easy version) (Nowcoder78306 D)
题目大意
在一个标有 1 - n 的数轴上给定 m 条线段,第 i 个线段的左右端点分别为 s t i st_i sti 和 e d i ed_i edi ,求有多少种线段的选择方案可以使得数轴上的每个整数点至少被覆盖两次。
解题思路
m最大为10。则方案数最多只有 2 的 10 次方 - 1,1023种。数据量很小直接采用 dfs 爆搜。
这里我用的是二进制枚举。即枚举从 1 到 1024,其二进制数的每一位决定每一条线段选不选。
使用一个差分数组存储选择的线段。最后前缀和 pre 加回来检查是否每一个端点都被覆盖两次。判断第一个点是否大于等于 2 做一个小小的剪枝。
神奇的代码#include <bits/stdc++.h>
using namespace std;
using LL = long long;
int n, m, ans;
vector<pair<int, int>> p(10);
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> m;
for (int i = 0; i < m; i++) {
cin >> p[i].first >> p[i].second;
}
for (int i = 1; i <= 1 << m; i++) {
string s = "0000000000";
vector<int> a(n + 5);
int t = i;
for (int j = 0; j < m; j++, t >>= 1) {
if (t & 1) {
s[j] = '1';
}
}
for (int j = 0; j < m; j++) {
if (s[j] == '0') continue;
a[p[j].first]++;
a[p[j].second + 1]--;
}
if (a[1] >= 2) {
int pre = 0;
bool ok = 1;
for (int i = 1; i <= n; i++) {
pre += a[i];
if (pre < 2) {
ok = 0;
break;
}
}
if (ok) {
ans++;
}
}
a.clear();
}
cout << ans;
return 0;
}
E - 小A的任务 (Nowcoder78306 E)
题目大意
<++>
解题思路
<++>
神奇的代码
F - 小A的线段(hard version) (Nowcoder78306 F)
题目大意
<++>
解题思路
<++>
神奇的代码
标签:using,int,++,ans,cin,long,牛客,小白月赛,90 From: https://blog.csdn.net/2301_80309588/article/details/137409597