uscao专题1.1
题目地址: http://wikioi.cn/training/mission/145
第一题 你的飞碟在这儿Your Ride Is Here
题目大意: 题目给定 两个字符串,而每个字符代表的是(A=1,Z=26),而字符串的数字代表他字符串里每个字母代表的数字的乘积。求这两个字符串的数字mod 47是否相等,如果相等就输出"GO",否则输出"STAY"。
解题思路: 先读入两个字符串,在求这两个字符串的长度,再用两个循环求每个字符串的数字(每个字符代表的数字就是这个字符减去"A"),在判断是否相等。
代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long a=1,b=1,len1,len2; string ch,sh;
cin>>ch>>sh; len1=ch.size(); len2=sh.size();
for(int i=0;i<len1;i++)
{
int tmp=ch[i]-'A'+1;
a=a*tmp%47;
}
for(int i=0;i<len2;i++)
{
int tmp=sh[i]-'A'+1;
b=b*tmp%47;
}
if(a%47==b%47) cout<<"GO"<<endl;
else cout<<"STAY"<<endl;
return 0;
}
第二题 贪婪的送礼者Greedy Gift Givers
题目: 对于一群(NP个)要互送礼物的朋友,GY要确定每个人收到的钱比送出的多多少。在这一个问题中,每个人都准备了一些钱来送礼物,而这些钱将会被平均分给那些将收到他的礼物的人。然而,在任何一群朋友中,有些人将送出较多的礼物(可能是因为有较多的朋友),有些人有准备了较多的钱。给出一群朋友,没有人的名字会长于 14 字符,给出每个人将花在送礼上的钱,和将收到他的礼物的人的列表,请确定每个人收到的比送出的钱多的数目。
解题思路: 开两个map数据结构一个是收到的钱,另一个是送出去的钱,在每次进行模拟给钱,最后判断一下就可以了。
#include<bits/stdc++.h>
using namespace std;
int n;
map <string,int> mp; //收
map <string,int> kp; //送
string a[20];
int main()
{
cin>>n;
for(