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++; } } }