zcmu-1653,1654...【水题集合】

1653: 这样真的好么(*^*)

Description

在某人参加的某一场比赛中,一共有k位选手参赛,他们的编号是1到k。主办方准备了n个气球,主办方同样把这n个气球随机的编号为1到k中的一个数(保证n可以整除k),然后比赛胜利的规则就是,主办方随机的选择一个气球,如果这个气球的编号是X,那么X选手就胜出...,这样真的好么(*^*),主办方为了体现自己的,暗室不欺 不同流俗 不欺暗室 不忘沟壑 赤子之心 德厚流光 高情远致 高山景行 功德无量 厚德载物 怀瑾握瑜 蕙心纨质 见危授命 鞠躬尽瘁,死而后已 精金良玉 敬老慈幼 良金美玉 明德惟馨 年高德劭 前人栽树,后人乘凉 青天白日 山高水长 拾金不昧 玉洁松贞 沅茝沣兰 云中白鹤 志士仁人等高尚的品德.决定重新编号,使得每个人获胜的概率是一样哒~~,所以这位高尚的主办方想知道最少得修改几次哦!!!

Input

   多组测试,请处理到文件末尾,输入的格式是,第一行是n,k(k<n<=100)接下来n个数,表示气球的编号。

Output

一个数,表示需要修改的次数。

Sample Input

4 2 2 1 2 2 6 2 2 2 1 1 1 2

Sample Output

1 0

注意:数组开小了,我一开始开的是100,后面改成101就ac了

#include<bits/stdc++.h>
using namespace std;
int mapp[101];
int main(void)
{
	int n,k,a;
	while(~scanf("%d%d",&n,&k))
	{
		memset(mapp,0,sizeof mapp);
		for(int i=0;i<n;i++)
		{
			scanf("%d",&a);
			mapp[a]++;
		}
		int ans=0;
		for(int i=1;i<=k;i++)
		if(mapp[i]<n/k) ans+=n/k-mapp[i];
		cout<<ans<<endl;
	}
	return 0;
}

1654: 据说题目里藏着某人的QQ号\(^o^)/~

Description

某人喜欢把自己的字符串加密。加密是这样的,有一个字母与数字的转换表。把字符串的中的每一个字符转换为对应的数字。然后把这些数字相乘,最后再把这个数字对 751492854 取余数。

Input

多组数据,处理到文件末尾。一行字符串(只有字母组成,长度小于1000)

Output

输出一个整数表示答案

Sample Input

d

Sample Output

5

HINT



A(a):6

B(b):9

C(c):0

D(d):5

E(e):8

F(f):1

G(g):9

H(h):4

I(i):6

J(j):3

K(k):2

L(l):34

M(m):67

N(n):67

O(o):78967

P(p):345

Q(q):454

R(r):434

S(s):345

T(t):12

U(u):978

V(v):563

W(w):34

X(x):34

Y(y):5885

Z(z):45

注意:相乘的结果超过int,所以用long long

#include<bits/stdc++.h>
using namespace std;
int a[]={6,9,0,5,8,1,9,4,6,3,2,34,67,67,78967,345,454,434,345,12,978,563,34,34,5885,45};
int main(void)
{
	string s;
	while(cin>>s)
	{
		int len=s.length();
		long long sum=1;
		for(int i=0;i<len;i++)
		{
			s[i]=tolower(s[i]);
			sum=(sum*a[s[i]-'a'])%751492854;
		}
		cout<<sum<<endl;
	}
	return 0;
}

1655: 某人好想AC哦~

Description

给你一个字符串S和一个字符串的P,希望你从s中删除p(注意一点的是,删除p后,可能又会形成一个新的p)

Input

一行2个字符串S,P;(长度小于100)

Output

输出S删除P后的结果

Sample Input

woyaowwwaaaac wa

Sample Output

woyaoac

HINT

解释;

 第一步:woyaowwwaaaac--->woyaowwaaac

 第二步:woyaowwaaac---->woyaowaac

第三步:woyaowaac--->woyaoac

注意:这题虽然是水题,但是自己被自己的自以为给坑了,删除后可以形成新的要删除的字符串,但不一定只是删除后位置前面一个开始形成新的字符串,它还可能是更前面,然后就换了一个find函数,一开始用的是find(p,pos),后面改成用find(p),然后删除直接用迭代器的erase函数,一开始用的是删除的起始位置及删除的个数,后面改成删除begin和end之间的字符串,也算是大换血吧,毕竟就那几行代码。

#include<bits/stdc++.h>
using namespace std;
int main(void)
{
	string s,p;
	while(cin>>s)
	{
		cin>>p;
		int len=p.length();

		while(s.find(p)!=string::npos)
		{
			int pos=s.find(p);
			s.erase(s.begin()+pos,s.begin()+pos+len);	
		}
		cout<<s<<endl;
	}
	return 0;
}

1657: O(∩_∩)O哈!

Description

现在有个n个同学的姓名和成绩,按照分数从大到小,分数相同的按照名字的字典序从小到大排列。

Inpu

多组测试,处理到文件末尾。一个数n,接下来是n(n<=100)行,每行一个姓名,成绩

Output

排序的结果

Sample Input

4 zcc 59 ayer 90 huhu 90 zhang 0

Sample Output

ayer 90 huhu 90 zcc 59 zhang 0

#include<bits/stdc++.h>
using namespace std;
struct grade{
	string name;
	int score;
};
grade g[101];
bool cmp(grade a,grade b)
{
	if(a.score!=b.score) return a.score>b.score;
	else return a.name<b.name;
}
int main(void)
{
	int n;
	while(~scanf("%d",&n))
	{
		for(int i=0;i<n;i++)
		cin>>g[i].name>>g[i].score;
		sort(g,g+n,cmp);
		for(int i=0;i<n;i++)
		cout<<g[i].name<<" "<<g[i].score<<endl; 
	}
	return 0;
} 

猜你喜欢

转载自blog.csdn.net/Imagirl1/article/details/82693069
今日推荐