2014
03-23

# An Odd Award Rule

The education of primary school in China is a big problem now. A teacher must be very careful not only when he/she is criticizing the students, but also when he/she is giving awards to good students. Teacher Liu always gave the top ten students on his examination some little awards before, but some parents are a little bit angry about this now. They say that their little kids may get hurt because they will never get the awards. Teacher Liu has to change his award rule. He wants all students have a chance to win the awards, no matter their scores are good or poor. But he still wants good students to get more chance. So the new rule seems a little bit odd: anyone whose score equals to the sum of the scores of OTHER 3 or 2 students, will win the award. Now figuring out who is qualified for the awards seems a little bit hard for Teacher Liu. As the monitor of his class and a little programmer, you should help him to do this.

For each test case, first print an integer in a line, indicating how many students win the awards. Then print the names of those who win the awards in alphabetic order, each name in a line.

For each test case, first print an integer in a line, indicating how many students win the awards. Then print the names of those who win the awards in alphabetic order, each name in a line.

1
5
SIKE 12
WORRY 20
LUCENT 8
KILI 3
TOM 1

2
SIKE
WORRY

An Odd Award Rule 这个题目包括上面的两个题目都是昨天做的一套题目中的几个水题，现在整理了一下解题报告。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>

using namespace std;

const int maxx=25;

struct Stu{
string name;
int sco;
};

Stu stu[maxx];
string name[maxx];
int yi[maxx][305],yihwi[305];
int st;

void init(){
st=0;
memset(yi,0,sizeof(yi));
memset(yihwi,0,sizeof(yihwi));
}

int main(){
int T,n,i,j,k;
scanf("%d",&T);
while(T--){
init();
scanf("%d",&n);
for(i=0;i<n;i++){
cin>>stu[i].name>>stu[i].sco;
}
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(i==j)continue;
yi[i][stu[i].sco+stu[j].sco]++;
for(k=0;k<n;k++){
if(i==k || j==k)continue;
yi[i][stu[i].sco+stu[j].sco+stu[k].sco]++;
}
}
}
for(i=0;i<n;i++){
for(j=i+1;j<n;j++){
yihwi[stu[i].sco+stu[j].sco]++;
for(k=j+1;k<n;k++){
yihwi[stu[i].sco+stu[j].sco+stu[k].sco]++;
}
}
}
for(i=0;i<n;i++){
if(yihwi[stu[i].sco] && yihwi[stu[i].sco]>yi[i][stu[i].sco]){
name[st++]=stu[i].name;
}
}
sort(name,name+st);
printf("%d\n",st);
for(i=0;i<st;i++){
cout<<name[i]<<endl;
}
}
return 0;
}

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>

using namespace std;

const int maxx=25;

struct Stu{
string name;
int sco;
};

Stu stu[maxx];
string name[maxx];
int st;

void init(){
st=0;
}

int main(){
int T,n,i,j,k,l;
scanf("%d",&T);
while(T--){
init();
scanf("%d",&n);
for(i=0;i<n;i++){
cin>>stu[i].name>>stu[i].sco;
}
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(i==j)continue;
for(k=0;k<n;k++){
if(i==k || j==k)continue;
if(stu[i].sco==stu[j].sco+stu[k].sco){
name[st++]=stu[i].name;
goto first;
}
for(l=0;l<n;l++){
if(i==l || j==l || k==l)continue;
if(stu[i].sco==stu[j].sco+stu[k].sco+stu[l].sco){
name[st++]=stu[i].name;
goto first;
}
}
}
}
first:;
}
sort(name,name+st);
printf("%d\n",st);
for(i=0;i<st;i++){
cout<<name[i]<<endl;
}
}
return 0;
}

1. 好开心~ 【4399生死狙击】的兄弟们~ 我发现了一个 可以免费刷取:炎魔咆哮、雷霆之怒、所有黄金武器的网站!我已经刷到了3把 英雄武器!爽死了哈哈 地址： http://t.cn/R5K4z56 【（末日审判）可以免费刷永久啦】

2. 好开心~ 【4399生死狙击】的兄弟们~ 我发现了一个 可以免费刷取:炎魔咆哮、雷霆之怒、所有黄金武器的网站!我已经刷到了3把 英雄武器!爽死了哈哈 地址： http://t.cn/R5K4z56 【（末日审判）可以免费刷永久啦】

3. 好开心~ 【4399生死狙击】的兄弟们~ 我发现了一个 可以免费刷取:炎魔咆哮、雷霆之怒、所有黄金武器的网站!我已经刷到了3把 英雄武器!爽死了哈哈 地址： http://t.cn/R5K4z56 【（末日审判）可以免费刷永久啦】

4. 好开心~ 【4399生死狙击】的兄弟们~ 我发现了一个 可以免费刷取:炎魔咆哮、雷霆之怒、所有黄金武器的网站!我已经刷到了3把 英雄武器!爽死了哈哈 地址： http://t.cn/R5K4z56 【（末日审判）可以免费刷永久啦】

5. 好开心~ 【4399生死狙击】的兄弟们~ 我发现了一个 可以免费刷取:炎魔咆哮、雷霆之怒、所有黄金武器的网站!我已经刷到了3把 英雄武器!爽死了哈哈 地址： http://t.cn/R5K4z56 【（末日审判）可以免费刷永久啦】

6. 好开心~ 【4399生死狙击】的兄弟们~ 我发现了一个 可以免费刷取:炎魔咆哮、雷霆之怒、所有黄金武器的网站!我已经刷到了3把 英雄武器!爽死了哈哈 地址： http://t.cn/R5K4z56 【（末日审判）可以免费刷永久啦】

7. 好开心~ 【4399生死狙击】的兄弟们~ 我发现了一个 可以免费刷取:炎魔咆哮、雷霆之怒、所有黄金武器的网站!我已经刷到了3把 英雄武器!爽死了哈哈 地址： http://t.cn/R5K4z56 【（末日审判）可以免费刷永久啦】

8. 好开心~ 【4399生死狙击】的兄弟们~ 我发现了一个 可以免费刷取:炎魔咆哮、雷霆之怒、所有黄金武器的网站!我已经刷到了3把 英雄武器!爽死了哈哈 地址： http://t.cn/R5K4z56 【（末日审判）可以免费刷永久啦】

9. 好开心~ 【4399生死狙击】的兄弟们~ 我发现了一个 可以免费刷取:炎魔咆哮、雷霆之怒、所有黄金武器的网站!我已经刷到了3把 英雄武器!爽死了哈哈 地址： http://t.cn/R5K4z56 【（末日审判）可以免费刷永久啦】

10. 第一句可以忽略不计了吧。从第二句开始分析，说明这个花色下的所有牌都会在其它里面出现，那么还剩下♠️和♦️。第三句，可以排除2和7，因为在两种花色里有。现在是第四句，因为♠️还剩下多个，只有是♦️B才能知道答案。

11. if(j){
int ans=a ;
for(int x=j-1;x>=0;x–){
if(!a ) break;
ans=min(ans,a );
sum+=ans;
}
}
求解释，，dp的思路是什么呢？

12. 可以根据二叉排序树的定义进行严格的排序树创建和后序遍历操作。如果形成的排序树相同，其树的前、中、后序遍历是相同的，但在此处不能使用中序遍历，因为，中序遍历的结果就是排序的结果。经在九度测试，运行时间90ms，比楼主的要快。