P8964 梦幻 | Reopening of Dream

望你没有因此而功亏一篑过······

花开不是为了花落,而是为了更加灿烂······

最初拥有的只是理想和自信,但所有的一切都从这里交错着生长,在努力与汗水铺成的路上走下去不会是错误的选择——至少你为此喜怒哀乐过······

题目描述

PION2202 的选手代码公布了。作为一个连续编写了十年迷惑行为大赏的人,你当然是要抢先把代码中的各种事迹发出来啦。

首先关注的肯定是大家的文件输入输出有没写对。你已经让小 E 把每道题的题目名称和每位选手的 freopen 语句整理出来了。

PION2202 一共有 m 道题,有 n 位选手参与。你决定把选手分成三类:

  1. 普通人:最正常不过的 freopen 语句;
  2. 见祖宗人:被注释的 freopen 语句;
  3. 乐子人:其他形式的 freopen 语句。

形式化地,普通人的所有题目的 freopen 语句都应该恰好是

freopen("<title>.in","r",stdin);
freopen("<title>.out","w",stdout);

其中的 <title> 应替换成对应的题目名称。

见祖宗人的 freopen 语句中存在至少一道题的至少一行语句以 //freopen( 开头,以 ); 结尾。

如果一位选手的 freopen 语句不满足上面两种情况,则称这位选手为乐子人。

你需要判断每位选手是普通人,见祖宗人还是乐子人。

输入格式

第一行一个正整数 T,表示子任务编号。

第二行两个正整数 n,m,分别表示选手数和题目数。

接下来 m 行,每行包含一个仅由小写字母构成的字符串,其中第 i 行表示第 i 道题目的题目名称。保证题目名称的长度在 11 到 1010 之间。

接下来n×(2m+1) 行,在每 2m+1 行中,第一行为空行,后 2m 行表示一位选手的所有题目的 freopen 语句,按照题目顺序给出。前两行为第一题的 freopen 语句,依次类推,最后两行为最后一题的 freopen 语句。

保证所有的 freopen 语句的每个字符的 ASCII 码均在 33 到126 之间,即不含空格等不可见字符。

保证每一行 freopen 语句的长度在 11到 100 之间。

输出格式

输出 n 行,其中第 i 行表示第 i 位选手的分类。

如果是普通人,就要祝他 RP++,所以就输出一行 PION2202 RP++.

如果是见祖宗人,那就只好输出一行 Wrong file operation takes you to your ancestors along with your 3 years' efforts on OI.

如果是乐子人,就祝他在玩得开心的同时注意不要弄错了,于是输出一行 Good luck and have fun.

输入输出样例

输入 #1

3
4 4
tnalp
woem
kcarrab
hctam

freopen("tnalp.in","r",stdin);
freopen("tnalp.out","w",stdout);
freopen("woem.in","r",stdin);
freopen("woem.out","w",stdout);
freopen("kcarrab.in","r",stdin);
freopen("kcarrab.out","w",stdout);
freopen("hctam.in","r",stdin);
freopen("hctam.out","w",stdout);

freopen("tnalp.in","r",stdin);
freopen("tnalp.out","w",stdout);
//freopen("woem.in","r",stdin);
freopen("woem.out","w",stdout);
freopen("kcarrab.in","r",stdin);
//I_AK_IOI!!!
freopen("hctam.in","r",stdin);
freopen("hctam.out","w",stdout);

freopen("tnalp.in","r",stdin);
freopen("tnalp.out","w",stdout)
freopen("owem.in","r",stdin);
freopen("woem.out","w",stdout);
freopen("kcarrab.in","r",stdout);
freopen("kcarrab.out","w",stdin);
freopen("hctam.out","w",stdout);
freopen("hctam.in","r",stdin);

freopen("tnalp.in","r",stdin);//I_LOVE_CCF
freopen("tnalp.out","w",stdout);
freopen("woem.in","r",stdin);//I_HATE_THIS
freopen("woem.out","w",stdout);
freopen("kcarrab.in"/*I_FORGET_HOW_TO_FIND_BRIDGES!!!!!!*/,"r",stdin);
freopen("kcarrab.out","w",stdout);
freopen("hctam.in","r",stdin);//I_CAN_GET_ONLY_8PTSqwq
freopen("hctam.out","w",stdout);

输出 #1

PION2202 RP++.
Wrong file operation takes you to your ancestors along with your 3 years' efforts on OI.
Good luck and have fun.
Good luck and have fun.

说明/提示

【样例解释】

第一位选手所有的 freopen 语句都很正常,所以是普通人。

第二位选手注释了题目 woem 的输入文件语句,所以是见祖宗人。虽然该选手在题目 kcarrab 中有乐子行为但由于已经满足了见祖宗人的条件,所以该选手被分类为见祖宗人。

第三位选手四道题的 freopen 语句都不是正常的。tnalp 的输出文件语句少了分号;woem 被打成了 owem;打反了 kcarrab 一题中的 stdin 和 stdout;交换了 hctam 的两个语句的顺序。在本题中算作乐子人。

第四位选手的 freopen 语句虽然能够正常工作,但是因为与正常的 freopen 语句不同而在本题中被算作乐子人。


【数据范围】

本题采用捆绑测试。

子任务 1(30 分):T=1。m=1 且题目名称为 yxalag。但是,如果你输出 No, general! 是不能得到分数的。
子任务 2(30 分):T=2。保证没有见祖宗人。
子任务 3(40 分):T=3。无特殊性质。

对于 100%100% 的数据:

保证 1≤T≤3。

保证1≤n≤1000。

保证 1≤m≤4。

保证题目名称的长度在 11到10 之间。

保证每一行 freopen 语句的长度在 11到100 之间。

看似很水,实则很补水

#include<bits/stdc++.h>
using namespace std;
const int N=10;
string a[N][2];//存储所有题目的正常freopen语句
signed main(){
    int t,n,m;
    cin>>t>>n>>m;
    for(int i=1;i<=m;i++){
    	string b;
    	cin>>b;
    	a[i][0]="freopen(\""+b+".in\",\"r\",stdin);";//拼接freopen输入语句
    	a[i][1]="freopen(\""+b+".out\",\"w\",stdout);";//拼接freopen输出语句
	}
	while(n--){
		int g=2;//g=0时表示乐子人,g=1时表示见祖宗人,g=2时表示普通人
		for(int i=1;i<=m;i++){
			string c,d;
			cin>>c>>d;
			string e=c.substr(0,10),f=d.substr(0,10);//e表示c的前10个字符,f表示d的前10个字符
			if(g!=1){
				if(e=="//freopen("&&c[c.size()-2]==')'&&c[c.size()-1]==';'||f=="//freopen("&&d[d.size()-2]==')'&&d[d.size()-1]==';'){//如果freopen语句以“//freopen(”开头,以“);”结尾
					g=1;
				}
				else if(c!=a[i][0]||d!=a[i][1]){//如果freopen语句不正常
					g=0;
				}
			}
		}
		if(g==0){//如果选手为乐子人
			puts("Good luck and have fun.");
		}
		if(g==1){//如果选手为见祖宗人
			puts("Wrong file operation takes you to your ancestors along with your 3 years' efforts on OI.");
		}
		if(g==2){//如果选手为普通人
			puts("PION2202 RP++.");
		}
	}
}

字符串就恶心了······puis就是cout的意思,就是快。freopen应该懂吧,就是文件

  • 41
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值