奇迹银桥「1」

每次写三个需要奇迹银桥的题,不满三个不发

也许有人能拿这些搞事?(模拟赛?)

我会粘题面的

T1「LOJ#4」Quine

内存限制:256 MiB  时间限制:1000 ms

标准输入输出            题目类型:传统

评测方式:Special Judge

题目描述

写一个程序,使其能输出自己的源代码。

代码中必须至少包含十个可见字符。

输入格式

输入文件为空。

输出格式

你的源代码。


题解

这个题,猛地一看,简单啊,cout

但是你仔细想想。

你要把源代码输出,莫非要递归? cout<<"cout<<"cout<<...."" 这显然是不行的。

所以要想办法打断递归。

窟思冥想。

可以用 printf ,有 "%s" 可以用,就是我们可以保证一个%s就可以输出一层了,然后就停下了。

信心满满的去码了。

然后,发现第二个问题:

在C++中,一个" "代表换行,一个"""代表双引号,而只有"\"才代表一个反斜杠。

(一个要用\输出,用\又有用\\输出……)

又炸了。

再次去规避这些问题。

打一个表出来:

" 34
' ' 10

好了,我们应该可以切了这个题了。

用%c输出10,34来换行,加引号。

但还是要避免换行,减少码长。

#include<cstdio>
int main(){char s[]="#include<cstdio>%cint main(){char s[]=%c%s%c;printf(s,10,34,s,34);}";printf(s,10,34,s,34);}

 T2 排座椅

题目描述

上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情。不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之

后,只有有限的D对同学上课时会交头接耳。同学们在教室中坐成了M行N列,坐在第i行第j列的同学的位置是(i,j),为了方便同学们进出,在教室中设置了K条横向的

通道,L条纵向的通道。于是,聪明的小雪想到了一个办法,或许可以减少上课时学生交头接耳的问题:她打算重新摆放桌椅,改变同学们桌椅间通道的位置,因为如果

一条通道隔开了两个会交头接耳的同学,那么他们就不会交头接耳了。

请你帮忙给小雪编写一个程序,给出最好的通道划分方案。在该方案下,上课时交头接耳的学生的对数最少。

输入格式

输入文件seat.in的第一行,有5个用空格隔开的整数,分别是M,N,K,L,D(2<=N,M<=1000,0<=K<M,0<=L<N,D<=2000)。

接下来的D行,每行有4个用空格隔开的整数。第i行的4个整数Xi,Yi,Pi,Qi,表示坐在位置(Xi,Yi)与(Pi,Qi)的两个同学会交头接耳(输入保证他们前后相邻或者左右相邻)。

输入数据保证最优方案的唯一性。

输出格式

输出文件seat.out共两行。

第一行包含K个整数,a1,a2……aK,表示第a1行和a1+1行之间、第a2行和a2+1行之间、…、第aK行和第aK+1行之间要开辟通道,其中ai< ai+1,每两个整数之间用空格隔开(行尾没有空格)。

第二行包含L个整数,b1,b2……bL,表示第b1列和b1+1列之间、第b2列和b2+1列之间、…、第bL列和第bL+1列之间要开辟通道,其中bi< bi+1,每两个整数之间用空格隔开(列尾没有空格)。

样例

样例输入

4 5 1 2 3
4 2 4 3
2 3 3 3
2 5 2 4

样例输出

2
2 4

题解

这个题很简单,只是说一个其基因桥,用小数点存一些相关信息

#include<iostream>
#include<cstdio>
#include<queue>
#include<algorithm>
using namespace std;
float tcl[2001]={0};
float tch[2001]={0};
void pour(float a[],int b){
	for(int i=1;i<=b;i++){
		cout<<a[i]<<" ";
	}
	cout<<"
";
}
int main(){	
	int h,l,cuh,cul,cdn;
	int ch1,cl1,ch2,cl2;
	cin>>l>>h>>cuh>>cul>>cdn;
	for(int i=1;i<=cdn;i++){
		cin>>cl1>>ch1>>cl2>>ch2;
		if(ch1==ch2){
			tch[cl1<=cl2?cl1:cl2]++;
//			pour(tcl,l);
		}	
		if(cl1==cl2){
			tcl[ch1<=ch2?ch1:ch2]++;
//			pour(tch,h);
		}	
	}
	for(int i=1;i<=l;i++){
		if(tcl[i]!=0)	tcl[i]+=(float)i/10000;
		else tcl[i]=0;
//		pour(tcl,l);
	//	cout<<" l"<<tcl[i]<<endl;
	}
	for(int j=1;j<=h;j++)
	{
		if(tch[j]!=0)	tch[j]+=(float)j/10000;
		else tch[j]=0;
	//	pour(tch,h);
	}
	sort(tcl+1,tcl+l+1,greater<float>());
//	pour(tcl,l);
	sort(tch+1,tch+h+1,greater<float>());
//	pour(tch,h);
	int r;
	for(int i=1;i<=h;i++){
		if(tch[i]<=0){
			tch[i]=1001.1;
			continue;
		}
		r=(int)tch[i];
		tch[i]=(tch[i]-r)*10000;
	}
	for(int i=1;i<=l;i++){
		if(tcl[i]<=0){
			tcl[i]=1001.1;
			continue;
		}
		r=(int)tcl[i];
		tcl[i]=(tcl[i]-r)*10000;
	}
	sort(tcl+0,tcl+cul+1,less<float>());
	sort(tch+0,tch+cuh+1,less<float>());
//	pour(tch,h);pour(tcl,l);
	for(int i=1;i<=cuh;i++){
		//cout<<"r"<<r<<endl;
	/*	if(r<1000)*/printf("%.0f",tch[i]);
		//cout<<"l"<<tcl[i]<<endl;
		if(i==cuh){
			printf("
");
			break;
		}
		else printf(" ");
		}
	for(int i=1;i<=cul;i++){
		//cout<<"r"<<r<<endl;
	/*	if(r<1000)*/printf("%.0f",tcl[i]);
//		cout<<(tch[i]-r)*1000;
		if(i==cul){
			printf("
");
			break;
		}
		else printf(" ");
	}
	
	getchar();
	return 0;
}

 T3 [LOJ#3]Copycat

题目描述

这道题用于测试文件输入输出,请注意使用文件输入输出,而非标准输入输出。

输入一个正整数$a$,输出这个数$a$

输入格式

第一行一个正整数$T$,表示有$T$组测试数据。

接下来$T$行,每行一个正整数$a$.

输出格式

输出$T$行,每行一个正整数$a$。

样例

样例输入 1

3
1
2
3

样例输出 1

1
2
3

样例输入 2

1
1000000000000000000000000000000000

样例输出 2

1000000000000000000000000000000000

题解

这不是题解,是比较一下各种文件输入输出的速度哒!

最上面是:fopen

#include <cstdio>
char st[99999];
int main() {
    FILE *fin, *fout;
    fin = fopen("copycat.in", "rb");
    fout = fopen("copycat.out", "wb");
    int num;
    fscanf(fin, "%d", &num);
    for (int i = 1; i <= num; i++) {
        fscanf(fin, "%s", st);
        fprintf(fout, "%s
", st);
    }
    fclose(fin), fclose(fout);
    return 0;
}

中间是:fstream(我喜欢流输入输出)

#include <iostream>
#include <fstream>
#include <cstdio>
#include <string>
using namespace std;
int T;
string a;
int main() {
    fstream fin, fout;
    fin.open("copycat.in", ios_base::in);
    fout.open("copycat.out", ios_base::out);
    fin >> T;
    while (T--) {
        fin >> a;
        fout << a << endl;
    }
    fin.close();
    fout.close();
    return 0;
}

 最下面是:freopen(简单)

#include <iostream>
#include <fstream>
#include <cstdio>
#include <string>
using namespace std;
int T;
string a;
int main() {
    freopen("copycat.in", "r", stdin);
    freopen("copycat.out", "w", stdout);
    cin >> T;
    while (T--) {
        cin >> a;
        cout << a << endl;
    }
    fclose(stdin), fclose(stdout);
    return 0;
}

 终于水完了

这是第一弹的全部内容!

原文地址:https://www.cnblogs.com/kalginamiemeng/p/QJYQ1.html