首页 > 其他分享 >题解

题解

时间:2023-01-24 14:33:39浏览次数:42  
标签:乐子 freopen 题解 zzr else && 祖宗

前言

只对 SubTask 2 的选手看过来!!!

很好的一道模拟题。

坑点分析

题目里说的很明白了:只要有 \(\ge 1\) 个带有注释的,就是一定是祖宗人,哪怕在后面或者前面出现过符合乐子人的判断。

一组 hack 能简单明了的看出坑点:

1
2 1
IBLIOI

IOIAKME
//freopen();

//freopen();
IOIAKME

显然答案都是祖宗人。

还需要注意关于换行的问题,如果使用 scanf()getchar() 就要麻烦的多,但是使用 cin 就可以避免这个问题。

弄明白这两个坑点,就可以 AC 了。

思路

考虑对每道题生成合法的 .in.outfreopen(),与输入的进行比较,如果完全一致,就是普通人,如果前面有 //freopen 且后面有 );,就一定是祖宗人,其余情况就是乐子人。

思路是很清晰的,主要是细节问题,在代码里会讲解。

如何生成符合标准的 freopen() 呢?看到只有题目名字不一样,我们就可以用 string 拼接出一个合法的语句。

但是 .in.out 以及 stdinstdout 也存在差异,只需要判断行数是否是偶数就可以了。

这一部分的代码:

for(i=1;i<=2*m;i++)
{
	string k = (i%2==1)?".in\",":".out\","; //这是关于后缀名的处理。
	string k1 = (i%2==1)?"\"r\",stdin);":"\"w\",stdout);";//这是关于是读入还是输出的处理。
	tque[i] = "freopen(\""+que[(i+1)/2]+k+k1;//这是存储合法的语句的数组。
}

关于双引号的细节很多,读者一定要看明白。

现在就开始特判是哪种人了,再次重申:只要有一个符合祖宗人的标准,哪怕同时符合了乐子人的标准,答案还是祖宗人。

对于这一个判断,需要开一个变量 zzr(是否是祖宗人),只要满足祖宗人的标准,就设为 \(1\),以后如果出现了乐子人,就不管他了。

关于这一部分的代码:

getchar();//把可恶的换行吃掉。 
string s;//每一行输入的东西。 
int f = 0;//0:RP++,1:Wrong,2:Good。 
int zzr;//祖宗人标志。 
for(i=1;i<=n;i++)//遍历选手。 
{
	f = 0;
	zzr = 0;//初始为 0。 
	for(j=1;j<=2*m;j++)//遍历输入。 
	{
		int l;
		cin>>s;
		l = s.size();
		if(zzr)//只要出现了祖宗人,答案一定是祖宗人,跳过就可以了。 
			continue;
		if(s[0]=='/'&&s[1]=='/'&&s[2]=='f'&&s[l-1]==';'&&s[l-2]==')')//判断是否是祖宗人。 
		{
			f = 1;
			zzr = 1;
			continue;
		}
		else if(s==tque[j])//普通人。 
			;
		else//不是普通人且不是祖宗人,就是乐子人。 
		{
			f = 2;
			continue;
		}
	}
	if(f==0)//判断输出。 
		puts("PION2202 RP++.");
	else if(f==1)
		puts("Wrong file operation takes you to your ancestors along with your 3 years\' efforts on OI.");
	else
		puts("Good luck and have fun.");
}

对于完整程序,把两部分拼起来,并加上输入定义等部分就可以了。

标签:乐子,freopen,题解,zzr,else,&&,祖宗
From: https://www.cnblogs.com/OoXiaoQioO/p/17066062.html

相关文章

  • P3802 小魔女帕琪 题解【期望dp】
    题目传送门P3802解题思路本题的解题思路关键在于分段。每一个结构段的概率在之后的结构段依然适用。判断是否符合这种特性最好方法是随机截取一段观察是否成立发现成......
  • 洛谷P3654 First Step题解
    这是一道暴力枚举。 大致题意:R行C列的棋盘要放下长度为K的线段,“#”表示无法放置,问有多少种放置方法。直接贴代码:#include<bits/stdc++.h>usingnamespacestd;i......
  • P4022 [CTSC2012]熟悉的文章 题解
    题目链接简要题意给定\(m\)个模板串和\(n\)个匹配串,如果一个字符串是一个模板串的子串且长度不小于\(L\)则称其为“熟悉的”,对于每个匹配串,求一个最大的\(L\),满足......
  • 程序员经典问题解答
    帮助在学习、上班的过程中,你是否经常遇到疑难问题无法解决,为此备受折磨?别担心,小编精选多道程序员最头痛的技术问题予以回答。QA小伙伴程序大牛C语言 Q:如何引用一个已经定义......
  • Solution 题解 UVA1389 Hard Life: 最小割,有向图,分数规划,和牛顿迭代
    题解UVA1389HardLife:最小割,有向图,分数规划,和牛顿迭代Preface黑题好耶看到了题解里面大多数是二分,我就来讲一讲简单又快速的DinkelbachAlgorithm吧!0-1分数规划......
  • 洛谷P2036 PERKET题解
     先来审题,主要有以下几个条件:酸度求乘积,苦度求和,两者相减的值最小(当然是绝对值)。下面附上AC代码:#include<bits/stdc++.h>//万能头文件usingnamespacestd;//......
  • 【题解】CF193D Two Segments
    题意给定一个\(1\simN\)的排列,在这个排列中选出两段互不重叠的区间,求使选出的元素排序后构成公差为1的等差数列的方案数。选出的两段区间中元素构成的集合相同时视为同一......
  • 【题解】P5787 二分图 /【模板】线段树分治
    概念线段树分治是一种用于维护时间轴等的离线算法,本质上是通过维护时间轴的连续区间得到某一时刻的状态。时间复杂度和普通线段树相同,空间复杂度为\(O(n\logn)\)例题......
  • Codeforces Round #845 (Div. 2) D题解
    D.ScoreofaTree题目链接:https://codeforces.com/contest/1777/problem/D个人感觉还是比较简单的一道计数题题意是给你一颗有n(n<=2e5)节点的树,初始时每个节点有一个......
  • 【题解】P4755 Beautiful Pair
    麻了,这么多典题没做过……思路分治/笛卡尔树。这一类和区间最值相关的区间端点对计数应该都可以用这种做法做。由于求的是最大值,不妨从大到小考虑每个\(a_i\)的贡......