20130924组队赛-Regionals 2011, Asia - Fukuoka

来源:互联网 发布:网站建设优化服务 编辑:程序博客网 时间:2024/05/26 19:15

这次就A题过的,写写......


A题的意思是有不同的人,然后每个人在不同的时间段进入教堂,只有当教父在的时候才会给教堂里的人加时间,然后

最后求谁的时间最长,输出最长时间,就是麻烦的:


代码:

 

#include <iostream>#include <cstdio>#include <string>#include <string.h>#include <map>#include <vector>#include <cstdlib>#include <algorithm>#include <cmath>#include <queue>#include <set>#include <stack>#include <functional>#include <fstream>#include <sstream>#include <iomanip>#include <numeric>#include <cassert>#include <bitset>#include <stack>#include <ctime>#include <list>#define INF 0x7fffffff#define max3(a,b,c) (max(a,b)>c?max(a,b):c)#define min3(a,b,c) (min(a,b)<c?min(a,b):c)#define mem(a,b) memset(a,b,sizeof(a))using namespace std;int QuickMod(int  a,int b,int n){    int r = 1;    while(b)    {        if(b&1)            r = (r*a)%n;        a = (a*a)%n;        b >>= 1;    }    return r;}int n;struct node{    int st;    int ed;    int sum;    int inde;} num[1001], SUM[1001];int con;int PQ;int sumtime(int X, int Y){    int sum = 0;    sum = (X*60 + Y);    return sum;}void init(){    for(int i = 0; i < 1001; ++i)    {        num[i].st = -1;        num[i].ed = -1;        num[i].sum = 0;        num[i].inde = -1;    }    PQ = 0;    con = 0;}int zhuangtai000;int main(){    int mon, day, hour, min, name;    char KO[10];    while(scanf("%d", &n))    {        if(!n)            break;        init();        zhuangtai000 = 0;        for(int kk = 0; kk < n; ++kk)        {            scanf("%d/%d %d:%d %s %d", &mon, &day, &hour, &min, KO, &name);            if(KO[0] == 'I')            {                //cout << "IN 的时候:" << endl;                if(name == 0)                {                    zhuangtai000 = 1;                    for(int i = 0; i < con; ++i)                        num[i].st = sumtime(hour, min);                }                else                {                    if(zhuangtai000 == 1)                    {                        num[con].st = sumtime(hour, min);                        int flag = 0;                        num[con].ed = -1;                        num[con].inde = name;                        //cout <<"num[con].inde : " << num[con].inde << endl;                        for(int i = 0; i < PQ; ++i)                        {                            if(SUM[i].inde == name)                            {                                cout << "000: -> " << endl;                                num[con].sum = SUM[i].sum;                                flag = 1;                                for(int j = i; j < PQ-1; ++j)                                    SUM[j] = SUM[j+1];                                break;                            }                        }                        if(flag == 0)                            num[con].sum = 0;                    }                    else                    {                        int flag = 0;                        num[con].st = -1;                        num[con].ed = -1;                        num[con].inde = name;                        //cout <<"num[con].inde : " << num[con].inde << endl;                        for(int i = 0; i < PQ; ++i)                        {                            if(SUM[i].inde == name)                            {                                num[con].sum = SUM[i].sum;                                flag = 1;                                for(int j = i; j < PQ-1; ++j)                                    SUM[j] = SUM[j+1];                            }                        }                        if(flag == 0)                            num[con].sum = 0;                        con++;                    }                    //cout << num[con].inde << "   0000000000000000000000000" << endl;                }            }            else if(KO[0] == 'O')            {                //cout << "OUT 的时候: "<< endl;                if(name == 0)                {                    zhuangtai000 = 0;                    for(int i = 0; i < con; ++i)                    {                        num[i].ed = sumtime(hour, min);                        num[i].sum += (num[i].ed - num[i].st);                        num[i].st = -1;                        num[i].ed = -1;                    }                }                else                {                    if(zhuangtai000 == 1)                    {                        cout << "**********" << endl;                        for(int i = 0; i < con; ++i)                        {                            //cout << "name: " << name << endl;                            //cout << "num[i].inde: " << num[i].inde << endl;                            if(num[i].inde == name)                            {                                //cout << "fuhetiaojian " << endl;                                SUM[PQ++] = num[i];                                cout << "12: -> "<< SUM[PQ].sum << endl;                                SUM[PQ].sum = (num[i].ed - num[i].st);                                for(int j = i; j < con-1; ++j)                                    num[j] = num[j+1];                                con--;                            }                        }                        //cout << "剩余: "<< con << endl;                    }                    else                    {                        //cout << "00000000000000000000000000000000" << endl;                        //cout << "******: -> " << con << endl;                        for(int i = 0; i < con; ++i)                        {                            if(num[i].inde == name)                            {                                //cout <<"name: " <<  name << ' ' << num[i].inde << endl;                                SUM[PQ++] = num[i];                                for(int j = i; j < con-1; ++j)                                    num[j] = num[j+1];                                con--;                            }                        }                        //cout << "剩余: "<< con << endl;                    }                }            }        }        //cout << "::" << con <<' ' << PQ << endl;        int MAX = -INF;        for(int i = 0; i < PQ; ++i)        {            //cout << SUM[i].sum << endl;            if(SUM[i].sum > MAX)                MAX = SUM[i].sum;        }        cout << MAX << endl;    }    return 0;}