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
快的,不信的话,你随便找一道
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_ 这是一个
这是使用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
by ud2_ @ 2022-08-04 17:04:19
@dingshengyang 请不要用 sync_with_stdio(true)
来刻意拉开差距。修复这个问题后再在 P3368 上测试,cin
比 scanf
快了 9%。
(不过 cout
是真的慢,只能希望 C++23 的 print
能有个快些的实现了)