整数快读:
inline bool scan_d( int &num )
{
char in;
bool IsN = false;
if ( in==EOF )
return false;
while ( in!='-'&&(in<'0'||in>'9') )
in = getchar();
if ( in=='-' )
IsN = true,num = 0;
else
num = in-'0';
while ( in=getchar(),in>='0'&&in<='9' )
num = num*10+in-'0';
if ( IsN )
num = -num;
return true;
}
浮点数快读:
inline bool scan_lf( double &num )
{
char in;
double Dec = 0.1;
bool IsN = false;
bool IsD = false;
in = getchar();
if ( in==EOF )
return false;
while ( in!='-'&&in!='.'&&(in<'0'||in>'9') )
in = getchar();
if ( in=='-' )
IsN = true,num = 0;
else if ( in=='.' )
IsD = true,num = 0;
else
num = in-'0';
if ( !IsD )
{
while ( in=getchar(),in>='0'&&in<='9' )
num = num*10+in-'0';
}
if ( in!='.' )
{
if ( IsN )
num = -num;
return true;
}
else
{
while ( in=getchar(),in>='0'&&in<='9' )
num += Dec*(in-'0'),Dec *= 0.1;
}
if ( IsN )
num = -num;
return true;
}
读入外挂:(1e7的char数组占内存11000k,看文件大小修改MX)
namespace IO
{
const int MX = 4e7;
char buf[MX];
int c,sz;
void Begin()
{
c = 0,sz = fread( buf , 1 , MX , stdin );
}
inline bool read( int &t )
{
while ( c<sz&&buf[c]!='-'&&(buf[c]<'0'||buf[c]>'9') ) c++;
if ( c>=sz ) return false;
bool flag = 0;
if ( buf[c]=='-' )
flag = 1,c++;
for ( t=0 ; c<sz&&buf[c]>='0'&&buf[c]<='9' ; c++ )
t = t*10+buf[c]-'0';
if ( flag )
t = -t;
return true;
}
}