Day3 划水一击

划水一击 模拟

  • 模拟是对真实事物或者过程的虚拟。模拟要表现出选定的物理系统或抽象系统的关键特性。模拟的关键问题包括有效信息的获取、关键特性和表现的选定、近似简化和假设的应用,以及模拟的重现度和有效性。可以认为仿真是一种重现系统外在表现的特殊的模拟。(来自百度百科)
  • 顾名思义,模拟就是我们去用代码实现某种操作,他怎么说你就怎么做,他要求你做什么你就做什么。
    模拟是竞赛中最基础的一项基本功,对思想难度要求不高,主要考察选手的代码能力。(来自课件)

统计单词数

题目描述

一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。

现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章中的某一独立单词在不区分大小写的情况下完全相同(参见样例1 ),如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例2 )。

输入格式

共2行。
第1行为一个字符串,其中只含字母,表示给定单词;
第2行为一个字符串,其中只可能包含字母和空格,表示给定的文章。

输出格式

一行,如果在文章中找到给定单词则输出两个整数,两个整数之间用一个空格隔开,分别是单词在文章中出现的次数和第一次出现的位置(即在文章中第一次出现时,单词首字母在文章中的位置,位置从00 开始);如果单词在文章中没有出现,则直接输出一个整数-1−1。

输入 #1

To
to be or not to be is a question

输出 #1

2 0

输入 #2

to
Did the Ottoman Empire lose its power at that time

输出 #2

-1

说明/提示

数据范围
1≤单词长度≤10。
1≤文章长度≤1,000,000。

#include<cstdio>
#define x(a) (a<'a'?(a-'A'+'a'):a)
using namespace std;
char a[15], b[1000005];
int count, first=-1, i;
int main()
{
	scanf("%s", a);
	char c = getchar();
	while((c = getchar()) != EOF && i<1000005)
	{  
        if(c == '
') break;
        b[i++] = c;
    }
	b[i] = '';
	for(int i=0, j=0; b[i]!=''; i++)
	{
        if((i==0 || b[i-1]==' ' || j) && x(b[i])==x(a[j]) && j++>-1)
		{
            if(a[j]=='' && (b[i+1]=='' || b[i+1]==' '))
			{
                if(first==-1) first = i+1-j;
                count++;
            }
        }
		else j=0;
    }
    if(count==0) printf("-1
");
    else printf("%d %d
", count, first);
    return 0;
}
  • 第二行那个是判断、转换大小写的,方便之后计数
  • EOF是。。。额

    EOF,为End Of File的缩写,通常在文本的最后存在此字符表示资料结束。
    在微软的DOS和Windows中,读取数据时终端不会产生EOF。此时,应用程序知道数据源是一个终端(或者其它“字符设备”),并将一个已知的保留的字符或序列解释为文件结束的指明;最普遍地说,它是ASCII码中的替换字符(Control-Z,代码26)。
    在C语言中,或更精确地说成C标准函数库中表示文件结束符(end of file)。在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。在文本文件中,数据都是以字符的ASCII代码值的形式存放。我们知道,ASCII代码值的范围是0~127,不可能出现-1,因此可以用EOF作为文件结束标志。
    档案存取或其它I/O功能可能传回等于象征符号值(巨集)EOF指示档案结束的情形发生。实际上 EOF 的值通常为 -1,但它依系统有所不同。巨集 EOF会在编译原始码前展开实际值给预处理器。
    C语言中,EOF常被作为文件结束的标志。还有很多文件处理函数处错误后的返回值也是EOF,因此常被用来判断调用一个函数是否成功。

版权声明:本文为CSDN博主「一个奔跑的C」的原创文章,遵循CC4.0BY-SA版权协议,转载请附上本声明。

乒乓球

题目背景

国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及。其中1111分制改革引起了很大的争议,有一部分球员因为无法适应新规则只能选择退役。华华就是其中一位,他退役之后走上了乒乓球研究工作,意图弄明白1111分制和2121分制对选手的不同影响。在开展他的研究之前,他首先需要对他多年比赛的统计数据进行一些分析,所以需要你的帮忙。

题目描述

华华通过以下方式进行分析,首先将比赛每个球的胜负列成一张表,然后分别计算在1111分制和2121分制下,双方的比赛结果(截至记录末尾)。

比如现在有这么一份记录,(其中W表示华华获得一分,L表示华华对手获得一分):

WWWWWWWWWWWWWWWWWWWWWWLW

在1111分制下,此时比赛的结果是华华第一局1111比00获胜,第二局1111比00获胜,正在进行第三局,当前比分11比11。而在2121分制下,此时比赛结果是华华第一局2121比00获胜,正在进行第二局,比分22比11。如果一局比赛刚开始,则此时比分为00比00。直到分差大于或者等于22,才一局结束。

你的程序就是要对于一系列比赛信息的输入(WLWL形式),输出正确的结果。

输入格式

每个输入文件包含若干行字符串,字符串有大写的WW、LL和EE组成。其中EE表示比赛信息结束,程序应该忽略E之后的所有内容。

输出格式

输出由两部分组成,每部分有若干行,每一行对应一局比赛的比分(按比赛信息输入顺序)。其中第一部分是1111分制下的结果,第二部分是2121分制下的结果,两部分之间由一个空行分隔。

输入

WWWWWWWWWWWWWWWWWWWW
WWLWE

输出

11:0
11:0
1:1

21:0
2:1

说明/提示

每行至多25个字母,最多有2500行

#include<cstdio>
#include <iostream>
using namespace std;
char s;
int w, l;
int win[50005];
int main()
{
	for(int i=1; cin>>s && s!='E'; i++)
	{
		if(s=='W') win[i]=1;
		else win[i]=2;
	}
	for(int i=1; 1; i++)
	{
		if(win[i]==1) w++;
		if(win[i]==2) l++;
		if(win[i]==0) 
		{
            printf("%d:%d
", w, l);
            break;
        }
        if(w-l>=2 || l-w>=2)
            if(w>=11 || l>=11)
            {
                printf("%d:%d
", w, l);
                w=0;
                l=0;
            }
	}
	printf("
");
	w=0;
	l=0;
	for(int i=1;1;i++)
    {
        if(win[i]==1) w++;
        if(win[i]==2) l++;
        if(win[i]==0)
        {
            printf("%d:%d", w, l);
            break;
        }
        if(w-l>=2 || l-w>=2)
            if(w>=21 || l>=21)
            {
                printf("%d:%d
", w, l);
                w=0;
                l=0;
            }
    }
    return 0;
} 
  • 第一个循环是循环输入,但是一开始用了scanf读入报错(听取WA声一片),后来用cin读就过了(???)
  • 然后,根据某大佬(@liuziwen)的提示,cin读入包括了换行。。。(我太弱了)
原文地址:https://www.cnblogs.com/orange-233/p/12205540.html