去水题时发现一个整数的读入使用 cin 读入和使用手写快读读入导致结果不同,求解 MnZn 之惑,感谢。
Code:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef __int128 lll;
#define endl '\n'
ll k;
string str;
ll cnt=0;
inline ll read()
{
ll x=0,f=1;
char ch=getchar();
while(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 write(lll x)
{
if(x<0)
{
putchar('-');
x=-x;
}
if(x>9)
{
write(x/10);
}
putchar(x%10+'0');
}
lll f(ll k)
{
char p=str[cnt++];
switch (p)
{
case '0': return pow(pow(2,k),2);
case '1': return 0;
case '2': return f(k-1)+f(k-1)+f(k-1)+f(k-1);
}
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>k;// k=read(); k的读入改为快读,结果改变
cin>>str;
write(f(k));
return 0;
}
读入数据:
2
2021010210001
使用 cin 读入导致的输出:
9
使用手写快读读入导致的输出:
一个以 17 开头的 34 位数,随机
MnZn 若脑残犯低级错误还望轻骂,感谢解惑。