写某道站外题的时候,写了个快读。
输入输出很大,但是这快读会莫名其妙去掉一个换行,求调。
完整代码如下:
//#include<bits/stdc++.h>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<iomanip>
#include<cstdio>
#include<string>
#include<vector>
#include<cmath>
#include<ctime>
#include<deque>
#include<queue>
#include<stack>
#include<list>
using namespace std;
const int N=1000+500,T=1e6;
int a[T+1],b[T+1],c[T+1],d[T+1],ans[N+1][N+1];
bool f[N*N+1];
namespace IO{
inline char getchar(){
static int p1,p2;
static char buf[1<<20];
if(p1==p2)p2=fread(buf,1,1<<20,stdin),p1=0;
return (p1==p2?EOF:buf[p1++]);
}
template<typename T>
inline void scanf(T &x){
x=0;
register int f=1;
register char ch=IO::getchar();
for(;ch<'0'||'9'<ch;ch=IO::getchar());
for(;'0'<=ch&&ch<='9';ch=IO::getchar())x=(x<<3)+(x<<1)+ch-'0';
x*=f;
}
static int p;
static char pbuf[1<<20];
inline void putchar(char ch){
pbuf[p++]=ch;
if(p>(1<<20)){
fwrite(pbuf,1,1<<20,stdout);
p=0;
}
}
template<typename T>
inline void printf(T x){
static char s[101];
int top=0;
do{
s[++top]=x%10+'0';
x/=10;
}while(x);
while(top)IO::putchar(s[top--]);
}
inline void end(){
if(p>1)fwrite(pbuf,1,p-1,stdout);
}
}
int gcd(int a,int b){
if(b==0)return a;
return gcd(b,a%b);
}
int lcm(int a,int b){
return a*b/gcd(a,b);
}
void Start(){
f[1]=true;
for(int x=2;x<=N;x++){
for(long long pl=x*x;pl<=N*N;pl*=x)f[pl]=true;
}
for(int i=1;i<=N;i++){
for(int j=i;j<=N;j++){
if(f[lcm(i,j)])ans[i][j]=ans[j][i]=1;
}
}for(int i=1;i<=N;i++){
for(int j=1;j<=N;j++)ans[i][j]+=ans[i][j-1];
}for(int i=1;i<=N;i++){
for(int j=1;j<=N;j++)ans[i][j]+=ans[i-1][j];
}
}
int main(){
freopen("test.in","r",stdin);
freopen("test.out","w",stdout);
Start();
int t;
IO::scanf(t);
for(int i=1;i<=t;i++){
IO::scanf(a[i]);
IO::scanf(b[i]);
IO::scanf(c[i]);
IO::scanf(d[i]);
}
for(int i=1;i<=t;i++){
// IO::printf(i);
// IO::putchar(':');
IO::printf(ans[b[i]][d[i]]-ans[b[i]][c[i]-1]-ans[a[i]-1][d[i]]+ans[a[i]-1][c[i]-1]);
IO::putchar(10);
}IO::end();
fclose(stdin);
fclose(stdout);
return 0;
}
输入输出文件:此处(真的很大)
注:使用普通printf可以过,且答案是正确的,仅仅是少输出了一个换行