社区讨论

进食后人:不要getline(谁看看为什么)

P3392涂条纹参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mhj1ycxw
此快照首次捕获于
2025/11/03 19:24
4 个月前
此快照最后确认于
2025/11/03 19:24
4 个月前
查看原帖
1: getline前如果已经cin过了,需要getchar()除去一个换行,否则出问题
2: 我也不知道是什么原理,我用了getline的代码14分,然后getline改cin之后就AC了
代码如下:
CPP
#include <bits/stdc++.h>
using namespace std;
int N,M;
int mino = 11451481;
int temp[55][3];//W B R
string line;
int fos(int ar[][3],int up,int dw)
{
    int sum = 0;
    for(int w = 0; w < up; w++)    sum += (M - ar[w][0]);
    // cout << sum << 'w' << endl;
    for(int b = up; b <= dw; b++)   sum += (M - ar[b][1]);
    // cout << sum << 'b' << endl;
    for(int r = dw + 1; r < N; r++)     sum += (M - ar[r][2]);
    // cout << sum << 'r' << endl;
    return sum;
}
int main()
{
    cin >> N >> M;
    getchar();
    for(int i = 0; i < N; i++)
    {
        getline(cin, line);
        for(int j = 0; j < M; j++)
        {
            if(line[j] == 'W')  temp[i][0] ++;
            if(line[j] == 'B')  temp[i][1] ++;
            if(line[j] == 'R')  temp[i][2] ++;
        }

    }

    for(int i = 1; i < N - 1; i++)
    {
        for(int j = N - 2; j >= i; j--)
        {
            mino = min(fos(temp,i,j),mino);
        }
    }
    cout << mino <<endl;
}
改完的我不发出来了,就是cin单个字符来判断的
有犇犇奆奆路过的话可以帮蒟蒻看看为什么getline错吗不清楚原理

回复

2 条回复,欢迎继续交流。

正在加载回复...