实力有限,只做了A、E、G和H四个题目……,高手完全可以忽略我的存在……
A题 Ubiquitous Religions
求宗教信仰相同的群体数目,简单题。可以用并查集做,即求祖先结点个数,做法和畅通工程一样。
E题 What Are You Talking About
即单词翻译,先输入的是模板,两两对应,然后给你一个句子,如果模板里面有出现的单词,就用另外一个代替,否则就原样输出。此题可以用map实现,开始的时候,我因为类型错误,WA了茫茫多次 - -、要注意,定义map的时候是用string的,所以,给它赋值的时候,也应该用string类型。map查找的时候,可以用m.find(str)!=m.end()或者m[str]!=””。
G 看病要排队
此题只要建立一个结构体doctor,包含病人病情优先级和挂号ID,然后创建doctor d[3][2002];
用以记录三个医生各自病人的情况。输入的时候,只管往数组中放入数据即可,在输出的时候,每次输出,都进行一次排序(如果用快排的话,要用二级排序,因为快排的不稳定性- -、)
然后输出第一个数据,接着把最后一个数据赋值个第一个数据,然后这一个数组数据个数减1,即下次输入的时候,把最后一个数据覆盖掉。输出部分参考代码:
else if(strcmp(c,"OUT")==0)
{
scanf("%d",&a);
if(i[a])
{
qsort(d[a-1],i[a],sizeof(d[a-1][0]),cmp);
printf("%d\n",d[a-1][0].id);
i[a]--;
d[a-1][0]=d[a-1][i[a]];
}
else
printf("EMPTY\n");
}
H题 Faulty Odometer
题意讲:每次数据增加时,逢4跳过(比如说:1后面是2,2后面是3,3后面是5,因为碰到4,所以跳过,又如39后面是50),可以得出1即为其本身,10为9,100为9*9即81,(注意考虑所计算数的和4的关系),主体代码如下:for(i=len-1;i>=0;i--)
{
if(s[i]>='4')k=s[i]-'1';
else k=s[i]-'0';
n+=k*t;
t*=9;
}