刷題筆記day12

1016 Phone Bills

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
struct jilu
{
    char name[25];
    int month;
    int day;
    int hour;
    int minute;
    int online;
}a[1005];
int bill[24];
void getans(int on,int off,int &money,int &time)
{
    money = time = 0;
    while(a[off].day>a[on].day || a[off].hour>a[on].hour
          ||a[off].minute>a[on].minute)
    {
        time++;
        money += bill[a[on].hour];
        a[on].minute++;

        if(a[on].minute>=60)
        {
            a[on].minute = 0;
            a[on].hour++;
        }
        if(a[on].hour>=24)
        {
            a[on].hour = 0;
            a[on].day++;
        }
    }
}
bool cmp(struct jilu a,struct jilu b)
{
    if(strcmp(a.name,b.name)!=0)
    {
        if(strcmp(a.name,b.name)<0)
            return 1;
        else return 0;
    }
    else if(a.month!=b.month)
    {
        return a.month<b.month;
    }
    else if(a.day!=b.day)
    {
        return a.day<b.day;
    }
    else if(a.hour!=b.hour)
    {
        return a.hour<b.hour;
    }
    else if(a.minute!=b.minute)
    {
        return a.minute<b.minute;
    }
}
int main()
{
    int i;
    for(i=0;i<24;i++)
    {
        scanf("%d",&bill[i]);
    }

    int n;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%s",a[i].name);
        scanf("%d:%d:%d:%d",
              &a[i].month,&a[i].day,&a[i].hour,&a[i].minute);
        char temp[25];
        scanf("%s",temp);
        if(strcmp(temp,"on-line")==0)
            a[i].online = 1;
        else if(strcmp(temp,"off-line")==0)
            a[i].online = 0;
        //a[i].needprint = 0;
    }
    sort(a,a+n,cmp);
/*
    for(i=0;i<n;i++)
    {
        printf("%s %d:%d:%d:%d %d\n",a[i].name,a[i].month,a[i].day,a[i].hour,a[i].minute,a[i].online);
    }
*/
    i=0;
    int off;
    int next;
    while(i<n)
    {
        int needprint = 0;
        next = i;
        while(next<n&&strcmp(a[i].name,a[next].name)==0)
        {
            if(needprint == 0&& a[next].online == 1)
                needprint = 1;
            else if(needprint == 1 && a[next].online == 0)
                needprint = 2;
            next++;
        }
        if(needprint<2)
        {
            i=next;
            continue;
        }

        int allmoney = 0;
        printf("%s %02d\n",a[i].name,a[i].month);

        while(i<next)
        {
            off = i+1;
            //printf("%d %d\n",i,next);
            if(a[i].online == 1)
            {
                while(off<next)
                {
                    if(a[off].online == 0)
                    {
                        break;
                    }
                    else if(a[off].online == 1)
                    {
                        i = off;
                        off++;
                    }
                }

                if(off == next)
                {
                    break;
                }
                else
                {

                    printf("%02d:%02d:%02d %02d:%02d:%02d "
                           ,a[i].day,a[i].hour,a[i].minute
                           ,a[off].day,a[off].hour,a[off].minute
                           );
                    int money,time;
                    getans(i,off,money,time);
                    double tmp = (double)money/100;

                    printf("%d $%.2f\n",time,tmp);
                    allmoney += money;
                    i = off+1;
                }
            }
            else
            {
                i=off;
            }

        }
        i=off;
        double tmpmoney = (double)allmoney/100;
        printf("Total amount: $%.2f\n",tmpmoney);
    }

}

1017 Queueing at Bank

#include<stdio.h>
#include<limits.h>
#include<vector>
#include<string.h>
#include<algorithm>
using namespace std;
int n,k;
struct people
{
    int time;
    int process;
    friend bool operator<(people a,people b)
    {
        return a.time>b.time;
    }
}a[10005];
vector<int> line;
int endtime[150];
bool cmp(struct people a,struct people b)
{
    return a.time<b.time;
}

int findmin()
{
    int i,q;
    int mintime = INT_MAX;
    for(i=0;i<k;i++)
    {
        if(endtime[i]<mintime)
        {
            q=i;
            mintime = endtime[i];
        }
    }
    return q;
}

int main()
{
    scanf("%d%d",&n,&k);
    int i;
    for(i=0;i<n;i++)
    {
        int hour,minute,second;
        scanf("%d:%d:%d %d",
              &hour,&minute,&second,&a[i].process);

        if(a[i].process>60)a[i].process = 60;

        a[i].time = hour*60*60+minute*60+second;
    }

    sort(a,a+n,cmp);

    int wait = 0;
    int num = n;
    int open = 8*3600;
    int close = 17*3600;

    memset(endtime,0,sizeof(endtime));
    for(i=0;i<k;i++)
    {
        endtime[i] = open;
    }

    for(i=0;i<n;i++)
    {
        if(a[i].time > close)
        {
            num--;
            continue;
        }

        int kk = findmin();

        if(endtime[kk]<=a[i].time)
        {
            endtime[kk] = a[i].time+a[i].process*60;
        }
        else
        {
            wait += endtime[kk]-a[i].time;
            endtime[kk] += a[i].process*60;
        }


    }

    double ans = (double)wait/60/num;
    printf("%.1f\n",ans);


}

 

1084 Broken Keyboard

#include<stdio.h>
#include<string.h>
#include<set>
using namespace std;
int main()
{
    char right[100];
    char str[100];

    scanf("%s\n%s",right,str);

    //printf("%s\n%s",right,str);
    set<char> s;

    int i,j;
    int len = strlen(right);
    i=j=0;
    while(i<len)
    {
        while(right[i]!=str[j])
        {
            char tmpc = right[i];
            if(s.count(tmpc)==0)
                if(tmpc>='0'&&tmpc<='9')
                {
                    s.insert(tmpc);
                    printf("%c",tmpc);
                }
                else if(tmpc>='a'&&tmpc<='z')
                {
                    s.insert(tmpc);
                    s.insert(tmpc-32);
                    printf("%c",tmpc-32);
                }
                else if(tmpc>='A'&&tmpc<='Z')
                {
                    s.insert(tmpc);
                    s.insert(tmpc+32);
                    printf("%c",tmpc);
                }
                else if(tmpc == '_')
                {
                    s.insert(tmpc);
                    printf("%c",tmpc);
                }
            i++;
        }
        if(right[i]==str[j])
        {
            i++;
            j++;
        }
    }


}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章