快读快写fread/fwrite求调??(玄关)
  • 板块灌水区
  • 楼主TH911
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/25 10:58
  • 上次更新2024/10/25 13:38:07
查看原帖
快读快写fread/fwrite求调??(玄关)
967959
TH911楼主2024/10/25 10:58

写某道站外题的时候,写了个快读。
输入输出很大,但是这快读会莫名其妙去掉一个换行,求调。 完整代码如下:

//#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可以过,且答案是正确的,仅仅是少输出了一个换行

2024/10/25 10:58
加载中...