社区讨论
P3392 把scanf改成cin就正确AC了
P3392涂条纹参与者 4已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @lo7jm3ye
- 此快照首次捕获于
- 2023/10/27 02:53 2 年前
- 此快照最后确认于
- 2023/10/27 02:53 2 年前
测试过多组数据,答案都一样。主要可以看看mian函数里的第一个for循环。我测试过了,用scanf和cin读取的字母个数都一样,为什么scanf就错了呢?
源代码:
CPP#include <cstdio>
typedef struct row{
int w, b, r;
row(){
w = b = r = 0;
}
} Row;
int main(){
int n, m;
scanf("%d%d", &n, &m);
Row data[n];
getchar();
for(int i = 0 ; i < n; i++){
for(int j = 0; j < m; j++){
char c;
scanf("%c", &c);
if(c == 'W') data[i].w++;
else if(c == 'R') data[i].r++;
else data[i].b++;
}
getchar();
// printf("%d: w = %d, b = %d, r = %d\n", i, data[i].w, data[i].b, data[i].r);
}
// printf("\n------\n");
int cost = 0, minimun = 50000;
int w = 0, b = 0, r = 0;
// Algorithm
for(int i = 0; i <= n - 3; i++){
for(int j = n - 1; j >= i + 2; j--){
w = 0, b = 0, r = 0;
//Calc
for(int k = 0; k <= i; k++){
w += data[k].b + data[k].r;
}
for(int k = i + 1; k < j; k++){
b += data[k].w + data[k].r;
}
for(int k = j; k <= n - 1; k++){
r += data[k].w + data[k].b;
}
// printf("i = %d, j = %d, w = %d, b = %d, r = %d\n", i, j, w, b, r);
cost = w + b + r;
// printf("%d\n", cost);
minimun = (cost < minimun)? cost: minimun;
}
}
printf("%d", minimun);
}
改后代码:
CPP#include <cstdio>
#include <iostream>
using namespace std;
typedef struct row{
int w, b, r;
row(){
w = b = r = 0;
}
} Row;
int main(){
int n, m;
scanf("%d%d", &n, &m);
Row data[n];
getchar();
for(int i = 0 ; i < n; i++){
for(int j = 0; j < m; j++){
char c;
// scanf("%c", &c);
cin >> c;
if(c == 'W') data[i].w++;
else if(c == 'R') data[i].r++;
else data[i].b++;
}
getchar();
// printf("%d: w = %d, b = %d, r = %d\n", i, data[i].w, data[i].b, data[i].r);
}
// printf("\n------\n");
int cost = 0, minimun = 50000;
int w = 0, b = 0, r = 0;
// Algorithm
for(int i = 0; i <= n - 3; i++){
for(int j = n - 1; j >= i + 2; j--){
w = 0, b = 0, r = 0;
//Calc
for(int k = 0; k <= i; k++){
w += data[k].b + data[k].r;
}
for(int k = i + 1; k < j; k++){
b += data[k].w + data[k].r;
}
for(int k = j; k <= n - 1; k++){
r += data[k].w + data[k].b;
}
// printf("i = %d, j = %d, w = %d, b = %d, r = %d\n", i, j, w, b, r);
cost = w + b + r;
// printf("%d\n", cost);
minimun = (cost < minimun)? cost: minimun;
}
}
printf("%d", minimun);
}
回复
共 4 条回复,欢迎继续交流。
正在加载回复...