为什么写快读会wa完,scanf就ac了(蒟蒻不解)

P1440 求m区间内的最小值

lethe_u @ 2022-08-27 21:39:51

#include<bits/stdc++.h>
using namespace std;int n,m;int a[2000010],dp[2000010];
inline int read(){
    int x=0,f=1;
    char ch;
    ch=getchar();
    if(ch<'0'||ch>'9')if(ch=='-')f=-1,ch=getchar();
    while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
    return x*f;
}
inline void p(int x){
    if(x>9)p(x/10);
    putchar(x%10+'0');
}
int main(){
    n=read();m=read();
    int head=1,tail=0;
    p(0);cout<<'\n';
    for(int i=1;i<=n;i++){
        a[i]=read();
        while(head<=tail&&i-dp[head]>=m)head++;
        while(head<=tail&&a[dp[tail]]>=a[i])tail--;
        tail++;
        dp[tail]=i;
        if(i!=n)p(a[dp[head]]),cout<<'\n';
    }
}

by myyyIisq2R @ 2022-08-27 21:41:23

快读很玄学。


by 654179_qwq @ 2022-08-27 21:45:00

逝不逝你的快读模板有问题?

inline long long rd(){
    long long x=0;bool ntv=false;char c=getchar();
    while((c<'0'||c>'9')&&c!='-')c=getchar();//这句少了?
    if(c=='-')ntv=true;else x=(c^48);c=getchar();
    while(c>='0'&&c<='9'){x=x*10+(c^48);c=getchar();}
    return ntv?-x:x;
}

by myyyIisq2R @ 2022-08-27 21:45:12

@lethe_u 快读这样写。

int read()
{
    int x = 0, w = 1;
    char ch = 0;
    while (ch < '0' || ch > '9')    // ch 不是数字时
    {
        if (ch == '-')
            w = -1;        // 判断是否为负
        ch = getchar();               // 继续读入
    }
    while (ch >= '0' && ch <= '9')    // ch 是数字时
    {
        x = x * 10 + (ch - '0');  // 将新读入的数字’加’在 x 的后面
        // x 是 int 类型,char 类型的 ch 和 ’0’ 会被自动转为其对应的
        // ASCII 码,相当于将 ch 转化为对应数字
        // 此处也可以使用 (x<<3)+(x<<1) 的写法来代替 x*10
        ch = getchar();  // 继续读入
    }
    return x * w;  // 数字 * 正负号 = 实际数值
}

by Haber @ 2022-08-27 21:50:03

反正 cin + 关同步 + cin.tie(0) = 80Pts.


by Haber @ 2022-08-27 21:50:22

当然是TLE


by 654179_qwq @ 2022-08-27 21:56:52

awa


by ForMyDream @ 2022-08-27 22:05:21

@lethe_u 您的快读这一句锅了

if(ch<'0'||ch>'9')if(ch=='-')f=-1,ch=getchar();

应改成

if(ch<'0'||ch>'9')if(ch=='-')f=-1;ch=getchar();

by CH_mengxiang @ 2022-08-28 12:08:34

@ForMyDream 你这样写也不行,两个句子要打大括号,打大括号后就好了


by ForMyDream @ 2022-08-28 12:40:34

@PRC_Dreamwastaken 是的,(我不习惯压行所以出锅了)


by lethe_u @ 2022-08-28 18:52:22

@ForMyDream 谢谢,ac了


|