洛谷每日三题--第二天

目录

P1957 口算练习题

题目描述

输入格式

输出格式

输入输出样例

说明/提示

P1308 [NOIP2011 普及组] 统计单词数

题目描述

输入格式

扫描二维码关注公众号,回复: 14468759 查看本文章

输出格式

输入输出样例

说明/提示

P1125 [NOIP2008 提高组] 笨小猴

题目描述

输入格式

输出格式

输入输出样例

说明/提示


P1957 口算练习题

题目描述

王老师正在教简单算术运算。细心的王老师收集了i道学生经常做错的口算题,并且想整理编写成一份练习。 编排这些题目是一件繁琐的事情,为此他想用计算机程序来提高工作效率。王老师希望尽量减少输入的工作量,比如 \texttt{5+8}5+8 的算式最好只要输入 \texttt 55 和 \texttt 88,输出的结果要尽量详细以方便后期排版的使用,比如对于上述输入进行处理后输出 \texttt{5+8=13}5+8=13 以及该算式的总长度 66。王老师把这个光荣的任务交给你,请你帮他编程实现以上功能。

输入格式

第一行为数值 ii

接着的 ii 行为需要输入的算式,每行可能有三个数据或两个数据。

若该行为三个数据则第一个数据表示运算类型,\texttt aa 表示加法运算,\texttt bb 表示减法运算,\texttt cc 表示乘法运算,接着的两个数据表示参加运算的运算数。

若该行为两个数据,则表示本题的运算类型与上一题的运算类型相同,而这两个数据为运算数。

输出格式

输出 2\times i2×i 行。对于每个输入的算式,输出完整的运算式及结果,第二行输出该运算式的总长度

输入输出样例

输入 #1复制

4
a 64 46
275 125
c 11 99
b 46 64

输出 #1复制

64+46=110
9
275+125=400
11
11*99=1089
10
46-64=-18
9

说明/提示

数据规模与约定

对于 50\%50% 的数据,输入的算式都有三个数据,第一个算式一定有三个数据。

对于所有数据,0<i\leq 500<i≤50,运算数为非负整数且小于 1000010000。

# include <iostream>
 using namespace std;
# include <string>
//char q[50];
string q;
string m;
//char m[50];
 int main()
 {
 	int n;
 	cin>>n;
 string p,k,z;
 	int d,c;

 	for(int i=0;i<n;i++)
 	{
 		cin>>p;
 		if(p=="a")
 		{
 			cin>>q>>m;
 				int d=stoi(q);
 					//cout<<"到这了" ;
 				int c=stoi(m);
 			int e=c+d;
 			
 		string l=to_string(e);
 	//	cout<<l;
 				cout<<d<<"+"<<c<<"="<<d+c<<endl;
 				cout<<q.length()+m.length()+2+l.length()<<endl;
 					z=p;
		}
	else if(p=="b")
		{
				cin>>q>>m;
				int d=stoi(q);
 				int c=stoi(m);
 				string l=to_string(d-c);
 				cout<<d<<"-"<<c<<"="<<d-c<<endl;
 				cout<<q.length()+m.length()+2+l.length()<<endl;
				 	z=p;	
		}
		else if(p=="c")
		{
				cin>>q>>m;
				int d=stoi(q);
 				int c=stoi(m);
 			//	cout<<c*d; 
 				string l=to_string(d*c);
 		//	cout<<l;
			 	cout<<d<<"*"<<c<<"="<<d*c<<endl;
 				cout<<q.length()+m.length()+2+l.length()<<endl;	
 					z=p;
		}
 		else
 		{
 				if(z=="a")
 		{
 				cin>>m;
 				int d=stoi(p);
 				int c=stoi(m);
 		string l=to_string(c+d);
 			cout<<d<<"+"<<c<<"="<<d+c<<endl;
 			cout<<p.length()+m.length()+2+l.length()<<endl;
 				//	z=p;
		}
	else if(z=="b")
		{
			cin>>m;
				int d=stoi(p);
 				int c=stoi(m);
 				string l=to_string(d-c);
 				cout<<d<<"-"<<c<<"="<<d-c<<endl;
 				cout<<p.length()+m.length()+2+l.length()<<endl;
				 //	z=p;	
		}
		else if(z=="c")
		{
					cin>>m;
				int d=stoi(p);
 				int c=stoi(m);
 				string l=to_string(d*c);
 				cout<<d<<"*"<<c<<"="<<d*c<<endl;
 				cout<<p.length()+m.length()+2+l.length()<<endl;	
 				//	z=p;
		}
	
 		
		}
// 		cin>>a[i];
	
	 }
 //	cin>>a;
// 	int len=strlen(a);
// 	cout<<len;
// 	
 }

P1308 [NOIP2011 普及组] 统计单词数

题目描述

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

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

输入格式

共 22 行。

第 11 行为一个字符串,其中只含字母,表示给定单词;

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

输出格式

一行,如果在文章中找到给定单词则输出两个整数,两个整数之间用一个空格隔开,分别是单词在文章中出现的次数和第一次出现的位置(即在文章中第一次出现时,单词首字母在文章中的位置,位置从 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\leq1≤ 第一行单词长度 \leq10≤10。

1\leq1≤ 文章长度 \leq10^6≤106。

noip2011 普及组第 2 题

# include <bits/stdc++.h>
using namespace std;
int main()
{
string n;
//cin>>n;
getline(cin,n);
   string m;
    getline(cin,m);

//cin>>m;
//全部小写化 
//transform(n.begin(),n.end(),n.begin(),::tolower);
//
//
//transform(m.begin(),m.end(),m.begin(),::tolower);
//int l=n.length();
 for (int i=0;i<n.length();++i){
        n[i]=tolower(n[i]);
    }
    for (int i=0;i<m.length();++i){
        m[i]=tolower(m[i]);
    }
m=' '+m+' ';
n=' '+n+' ';
if(m.find(n)==string::npos)
{
	cout<<-1;
 } 
else
{
	int alp=m.find(n);  //记录第一个出现得位置
	int blp=m.find(n),q=0;  //用来后边求出现次数 

	while(blp!=string::npos) 
	{
		++q;
		//cout<<q<<endl;
		blp=m.find(n,blp+1);
	}
	cout<<q<<" "<<alp;
}






	
}

P1125 [NOIP2008 提高组] 笨小猴

题目描述

笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!

这种方法的具体描述如下:假设 \text{maxn}maxn 是单词中出现次数最多的字母的出现次数,\text{minn}minn 是单词中出现次数最少的字母的出现次数,如果 \text{maxn}-\text{minn}maxn−minn 是一个质数,那么笨小猴就认为这是个 Lucky Word,这样的单词很可能就是正确的答案。

输入格式

一个单词,其中只可能出现小写字母,并且长度小于 100100。

输出格式

共两行,第一行是一个字符串,假设输入的的单词是 Lucky Word,那么输出 Lucky Word,否则输出 No Answer

第二行是一个整数,如果输入单词是 Lucky Word,输出 \text{maxn}-\text{minn}maxn−minn 的值,否则输出 00。

输入输出样例

输入 #1复制

error

输出 #1复制

Lucky Word
2

输入 #2复制

olympic

输出 #2复制

No Answer
0

说明/提示

【输入输出样例 1 解释】

单词 error 中出现最多的字母 \texttt rr 出现了 33 次,出现次数最少的字母出现了 11 次,3-1=23−1=2,22 是质数。

【输入输出样例 2 解释】

单词 olympic 中出现最多的字母 \texttt ii 出现了 11 次,出现次数最少的字母出现了 11 次,1-1=01−1=0,00 不是质数。

(本处原题面错误已经修正)

noip2008 提高第一题

# include <bits/stdc++.h>
using namespace std;
char s[105];
int a[27];
int main()
{
cin>>s;
int l=strlen(s);
int c;
	for(int i=0;i<l;i++)
	{
	c=s[i]-=97;
		a[c]++;
	}
	sort(a,a+26);
//for(int i=0;i<26;i++)
//{
//	cout<<a[i]<<"---"<<i<<"  ";
//}
//cout<<a[25];
int max=a[25];
int min;
		for(int i=0;i<26;i++)
		{
			if(a[i]!=0)
			{
		min=a[i];
		break;		
			}
		}
		int y=max-min;
int r;
if(y==1||y==0)
{
		cout<<"No Answer"<<endl<<"0";	
}
else
{
for(r=2;r<y;r++)
{
	if(y%r==0)
	{
		cout<<"No Answer"<<endl<<"0";
		break;
	}
}	
	
	if(r==y)
	{
		cout<<"Lucky Word"<<endl<<y;
	}
}

return 0;	
	
}

猜你喜欢

转载自blog.csdn.net/m0_61469860/article/details/125774445