理工Oj 1341 Who will be punished

找出缺席学生的名字
本文介绍了一个使用位运算解决的问题——如何快速找出唯一缺席的学生名字。通过异或操作,即便是在大量数据中也能高效准确地找到未出席的学生。

Who will be punished
Time Limit: 1000 MS Memory Limit: 32767 K
Total Submit: 559(93 users) Total Accepted: 208(80 users) Rating: Special Judge: No
Description
This time,suddenly,teacher Li wants to find out who have missed interesting DP lesson to have fun.The students who are found out will get strictly punishment.Because,teacher Li wants all the students master the DP algorithm.

However,Li doesn’t want to waste the class time to call over the names of students.So he let the students to write down their names in one paper.To his satisfaction,this time, only one student has not come.

He can get the name who has not come to class,but,it is troublesome,and,teacher always have many things to think about,so,teacher Li wants you, who is in the ACM team, to pick out the name.

Input
There are several test cases.The first line of each case have one positive integer N.N is the number of the students,and N will not greater than 500,000.

Then,following N lines,each line contains one name of students who have attended class.The N-1 lines are presented after N lines.These N-1 lines indicates the names of students who have come to class this time,one name in one line.

The length of student’s name is not greater than 30.

Process to the end of file.

Output
For each test case, first print a line saying “Scenario #k”, where k is the number of the test case.Then output the name of the student who have not come to class.One case per line.Print a blank line after each test case, even after the last one.
Sample Input
3

A

B

C

B

C

Sample Output
Scenario #1

A

位运算的巧妙应用,6^7^8^7^8=6
那么这个规律可以用在子串上,所得的结果就是其 ASCLL 码值 进行异或。

#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <string.h>
#include <string>
using namespace std;

int main()
{
    int n,id;
    while(~scanf("%d",&n))
    {
        char s[31];
        char ans[31];
        scanf("%s",ans);
        for(int i=1;i<2*n-1;i++)
        {
            scanf("%s",s);
            for(int j=0;j<strlen(s);j++)
            {
                ans[j]^=s[j];
            }
        }
        static int times=1;
        printf("Scenario #%d\n",times++);

        printf("%s",ans);
        printf("\n\n");
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值