A. Roma and Lucky Numbers(水题)
题目链接:codeforces 262A
题意:
给出 n 个数, 判断有多少个数中的4 和 7 的个数小于等于 k个
解题思路:
...模拟
#include <bits/stdc++.h>
using namespace std;
int main(){
int n, k, t, ans = 0;
cin >> n >> k;
for(int i = 1; i <= n; i++){
cin >> t;
int u = 0;
while(t){
if(t % 10 == 4 || t % 10 == 7){
u++;
}
t = t / 10;
}
if(u <= k){
ans++;
}
}
cout << ans << endl;
return 0;
}
B. Roma and Changing Signs(思维)
题目链接:codeforces 262B
题意:
给 n 个数,可以变换 k 次一个或多个数的符号(必须 k 次,不能多也不能少),求这n个数的最大和
题解:
先将最小的负数变为正数,如果都为正数后,还有n次没有变,那么变最小的,n为奇数,减去2*min,否则不变
比如给出样例
5 3
-1 -2 3 4 5
必须变3次,先将-1和 -2变为正数,还必须变一次,则将 1 变回 -1
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 2e5 + 5;
int a[maxn];
int main(){
int n, k;
cin >> n >> k;
for(int i = 1; i <= n; i++){
cin >> a[i];
}
int sum = 0, h = 999999;
for(int i = 1; i <= n; i++){
if(k && a[i] < 0){
sum = sum - a[i];
k--;
}
else{
sum = sum + a[i];
}
h = min(h, abs(a[i]));
}
if(k % 2 != 0){
sum = sum - h * 2;
}
cout << sum << endl;
return 0;
}
本文解析了CodeForces上的两道经典题目,A.RomaandLuckyNumbers通过模拟算法判断幸运数字,B.RomaandChangingSigns则运用思维策略最大化数列和。文章详细介绍了解题思路与代码实现。
B. (思维)&spm=1001.2101.3001.5002&articleId=100781340&d=1&t=3&u=1fafa610c8914c65a70f0859e4eaa00b)
975

被折叠的 条评论
为什么被折叠?



