三道题两小时。

第一题,圈住所有点的长方形,很简单略过。

第二题:奇偶排序。

 

奇偶排序
描述:

输入若干(不超过1000个)非负整数数字,请先取出为奇数的数字按从大到小排序,再取出偶数从小到大进行排序。

运行时间限制: 10 Sec
内存限制: 128 MByte
输入:

输入一串乱序的数字

输出:

输出排序后的数字

样例输入:
12 34 5 7 92 3 8
样例输出:
7 5 3 8 12 34 92
答案提示:

 

 第三题:记账系统。

饭圈的记账系统
描述:

W公司食堂因为装修需要停业一个月,员工们用餐不方便,热心的秘书MM组织了一个饭圈,在公司附近一家经济实惠的饭店解决用餐问题。饭圈采用会员制,会员的用餐费用由秘书MM负责记录。请帮助秘书MM完成这个月饭圈的记账系统: 

1)管理会员,允许会员加入或者退出饭圈 
2)记录会员的每次就餐信息,方便会员进行查询 
3)自动统计会员就餐产生的消费总额,方便秘书MM进行结账 

 

一行一条命令,不存在多个命令位于一行的情况。命令语法(各表达式之间使用1个空格隔开,测试用例确保1个空格): 

command [para]

  测试用例保证输入命令合法,如测试用例保证参数个数正确,参数都是正整数。

ca

1、增加会员

功能:增加饭圈会员

命令格式:

AddMember MemberId

输入:MemberId    会员ID

输出:成功,不输出;失败(如会员ID已存在),输出"AddMember false"。

 

2、删除会员

功能:删除饭圈会员,包括该会员所有消费记录

命令格式:

DelMember MemberId

输入:MemberId 会员ID

输出:无

 

3、餐费记录

功能:餐费记录,允许会员在同一天有多次餐费记录

命令格式:

RecordCost Date MemberNum MemberIdArray AverageCost

输入:Date      就餐日期,取值范围为1~31 

      MemberNum       就餐人数

      MemberIdArray   就餐的会员ID数组,用例保证MemberIdArray中不存在重复的ID 

      AverageCost       人均费用

输出:成功,不输出;失败(如日期错误,会员ID不存在等),输出"RecordCost false"。

注意:如果失败,该次操作的所有数据都不能录入。例如就餐日期错误,就餐的会员ID数组里面的某个ID是不存在的ID,该次操作都无效。

 

4、 查询餐费,排序输出

功能:查询指定日期内各个会员的餐费总额,按照会员ID从小到大排序输出

命令格式:

SortTotalCost BeginDate EndDate

输入:

      BeginDate   开始日期,包括BeginDate本身,取值范围为1~31 

      EndDate     结束日期,包括EndDate本身,取值范围为1~31 

输出:

      MemberNum   BeginDate至EndDate之间有消费记录的会员总数

      CostArray   各会员的餐费总额(会员ID  餐费总额,一个空格隔开)

说明: 测试用例保证EndDate大于等于BeginDate 

 

5、查询指定会员的餐费详单

功能:查询指定会员的餐费详单

命令格式:

QueryDetailsOfSingleMember MemberId BeginDate EndDate

输入:

      MemberId    会员ID

      BeginDate   开始日期,包括BeginDate本身,取值范围为1~31

      EndDate     结束日期,包括EndDate本身,取值范围为1~31

输出: 

      RecordNum          BeginDate至EndDate期间实际产生的餐费记录数 

      CostDetailsArray   餐费详单(日期 餐费,一个空格隔开),按照餐费记录的日期从小到大按序输出,如果存在一天内多次消费的,同一天的记录按照餐费录入顺序输出。

说明: 测试用例保证EndDate大于等于BeginDate

 

运行时间限制: 无限制
内存限制: 无限制
输入:

多行命令

输出:

命令执行的结果 

样例输入:
AddMember 0
AddMember 0
AddMember 1
AddMember 2
RecordCost 1 2 0 1 10
RecordCost 1 2 1 2 20
RecordCost 2 2 1 2 20
SortTotalCost 1 2
QueryDetailsOfSingleMember 0 1 2
样例输出:
AddMember false
3
0 10
1 50
2 40
1
1 10
答案提示:

 

 

 第二题代码,有一个用例没通过:

#define LOCAL
#include<iostream>
#include<cstdio>
#include <stdlib.h>
#include <algorithm>
using namespace std;

int main(){
    #ifdef LOCAL
        freopen("in.txt","r",stdin);
    #endif
    
    long int x,i,a=0,b=0,an[1001],bn[1001]; 
    while(scanf("%d",&x)!=EOF){
         if(x%2==1)
             an[a++]=x;
         else
             bn[b++]=x;

    }
    sort(an,an+a);
    sort(bn,bn+b);
    for(i=a-1;i>=0;i--)
        printf("%d ",an[i]);
    for(i=0;i<b;i++)
        printf("%d ",bn[i]);
    system("pause");
    
    return  0;
}

 

 第三题代码,写完了,但有bug,编译没通过。

//#define LOCAL
#include<iostream>
#include<cstdio>
#include <stdlib.h>
#include <algorithm>
#include <map>
#include <vector>
#include<cstring>
#include<string>
using namespace std;

struct member{
    int id;
    vector<int> rec[31];
    int tol[31];
};
map<int,int> mid,res;
member n_member;
vector<member> x;
int indx=0;

int main(){
    #ifdef LOCAL
        freopen("in.txt","r",stdin);
    #endif

    int a,n,i,j,per,tar,rec_size,date,begin,end,rec[10000];
    char tmp[20];
    while(scanf("%s",tmp)!=EOF){
        if(tmp[0]=='A'){
            scanf("%d",&a);
            if ( mid.find(a)==mid.end() )
                printf("AddMember false");
            else{
                mid[a]=indx++;
                n_member=new member;
                n_member.id=a;
                for(i=0;i<31;i++)
                    n_member.tol[i]=0;
                x.push_back(n_member);
            }
        }
        if(tmp[0]=='R'){
            scanf("%d",&date);    
            scanf("%d",&n);    
            for(i=0;i<n;i++)
                scanf("%d",&rec[i]);
            scanf("%d",&per);
            for(i=0;i<n;i++){
                x[mid[rec[i]]].rec[date].push_back(per);
                x[mid[rec[i]]].tol[date] += per;
            }
        }
        if(tmp[0]=='S'){
            scanf("%d%d",&begin,&end);
            for(i=0;i<x.size();i++){
                res[x[i].id]=0;
                for(j=begin;j<=end;j++)
                    res[x[i].id] += x[i].tol[j];
            }
             for (iterator iter = res.begin(); iter != res.end(); ++iter) {
                 cout << *iter << endl; }  
        }
        if(tmp[0]=='Q'){
            scanf("%d%d%d",&tar,&begin,&end);
            rec_size=0;
            tar=x[mid[tar]];
            for(i=begin;i<=end;i++){
                rec_size += tar.tol[i].size();
            }
            printf("%d\n",rec_size);
            for(i=begin;i<=end;i++){
                for(j=0;j<tar.rec[i].size();j++)
                    printf("%d %d\n",i,tar.rec[i][j]);
        }
    }

    system("pause");
    
    return  0;
}