为什么操作类型用char定义会出错

P3613 【深基15.例2】寄包柜

epiphanyer @ 2022-08-04 15:52:52

原来的代码

#include <bits/stdc++.h>
#include <vector>
using namespace std;
int n,q,x,y,k;
char op;
int main(){
    scanf("%d%d",&n,&q);
    vector <vector <int> > ca(n+1); 
    while(q--){
        scanf("%c",&op);
        if(op=='1'){
            scanf("%d%d%d",&x,&y,&k);
            if(ca[x].size()<y+1)ca[x].resize(y+1);
            ca[x][y]=k;
        }
        else{
            scanf("%d%d",&x,&y);
            printf("%d\n",ca[x][y]);
        }
    }
    return 0;
}

输完第二行就会停止运行

AC的代码

#include <bits/stdc++.h>
#include <vector>
using namespace std;
int n,q,x,y,k,op;
int main(){
    scanf("%d%d",&n,&q);
    vector <vector <int> > ca(n+1); 
    while(q--){
        scanf("%d",&op);
        if(op==1){
            scanf("%d%d%d",&x,&y,&k);
            if(ca[x].size()<y+1)ca[x].resize(y+1);
            ca[x][y]=k;
        }
        else{
            scanf("%d%d",&x,&y);
            printf("%d\n",ca[x][y]);
        }
    }
    return 0;
}

只是把op的char改成int了为什么差别这么大 求解 (名字不太危,谢绝提醒


by ud2_ @ 2022-08-04 16:05:41

@kkksc001 如果一定要用 scanf 那么可以写成 scanf(" %c", &op) 来读入第一个不是空格的字符。

但还是建议 cin,它比 scanf 略快。


by bikuhiku @ 2022-08-04 16:10:43

建议直接

char temp[2];
scanf("%s",temp);
if(temp[0] ......

by dingshengyang @ 2022-08-04 16:18:43

@ud2_ 不要误人子弟,scanf 是公认比 cin 快的,不信的话,你随便找一道 n\ge5\times10^6 的题,看看那个快。


by ud2_ @ 2022-08-04 16:31:51

@dingshengyang 这是一道 n = 16777216 的题,这是使用 cin 的评测记录,这是使用 scanf 的评测记录。

我认为一切结论都要通过实验得出。


by dingshengyang @ 2022-08-04 16:36:00

@ud2_ 你的cin是不是关同步了


by epiphanyer @ 2022-08-04 16:40:29

@Dreamlands ok,谢谢提醒


by dingshengyang @ 2022-08-04 16:43:08

@ud2_ 这是一个n\le 5\times10^5的题

这是使用cin的提交记录

[这是使用scanf的提交记录] (https://www.luogu.com.cn/record/82443898)


by dingshengyang @ 2022-08-04 16:43:40

markdown 炸了


by dingshengyang @ 2022-08-04 16:52:42

@ud2_ P8086

然后,scanf:[here](https://www.luogu.com.cn/record/82445624)621ms cin:[here](https://www.luogu.com.cn/record/82445687)2070ms

by ud2_ @ 2022-08-04 17:04:19

@dingshengyang 请不要用 sync_with_stdio(true) 来刻意拉开差距。修复这个问题后再在 P3368 上测试,cinscanf 快了 9%。

(不过 cout 是真的慢,只能希望 C++23 的 print 能有个快些的实现了)


上一页 | 下一页