设为首页 加入收藏

TOP

pat1016 Phone Bills(一)
2014-11-24 07:44:32 】 浏览:3686
Tags:pat1016 Phone Bills
题目不难,但输入输出数据多,格式多,需要些许思维和注意。花费了非常多时间,也算有些收获。首先,卡在输入输出上,string类型只能用cin,不能用scanf,printf ,若要用printf,只能用printf("%s",str.c_str())。输入中若带“:”,得用getchar()。在printf时,最后一个%02d少加了个%,一直报越界。要细心。此题发现,pat测试数据爱出在临界条件上,如01:02:14:58-01:02:14:59 ,若像我原本只考虑时间加头加尾加中间的,就会出错。另外,值得注意的点是,It is guaranteed that at least one call is well paired in the input. 只保证每次输入都至少有一次正确匹配,不保证每个用户都有一次正确匹配,因此可能出现有用户无一次正确匹配,此时不要输出用户的任何信息。我还是太弱了~
AC代码:
[cpp]
//1016 13:00
#include
#include
#include
using namespace std;
const int NUM=1005;
struct record
{
string name;
int dd,hh,mm;
string status;
int total;
}rec[NUM];
struct call
{
int s;
int e;
double m;
}cal[NUM];
int toll[26];
int sumToll;
int cmp(const void *a, const void *b)
{
record *x=(record *)a;
record *y=(record *)b;
// if(x->name==y->name&&x->dd==y->dd&&x->hh==y->hh)
// return x->mm - y->mm;
// if(x->name==y->name&&x->dd==y->dd)
// return x->hh - y->hh;
// if(x->name==y->name)
// return x->dd - y->dd;
// return x->name < y->name;
if(x->name==y->name)
return x->total - y->total;
if(x->name < y->name)
return -1;
else return 1;
}
int find(int start,int end)
{
int ans=0,i;
if(rec[start].dd
for(i=rec[start].hh+1;i<24;i++){
ans+=toll[i]*60;
}
for(i=0;i
ans+=toll[i]*60;
ans+=(60-rec[start].mm)*toll[rec[start].hh];
ans+=rec[end].mm*toll[rec[end].hh];
ans+=(rec[end].dd-rec[start].dd-1)*sumToll*60;
} else if(rec[start].dd==rec[end].dd) {
if(rec[end].hh>rec[start].hh){
for(i=rec[start].hh+1;i
ans+=toll[i]*60;
ans+=(60-rec[start].mm)*toll[rec[start].hh];
ans+=rec[end].mm*toll[rec[end].hh];
} else {
ans+=(rec[end].mm-rec[start].mm)*toll[rec[end].hh];
}
} else
ans=-1;
return ans;
}
int main()
{
int n,i,j,month;
freopen("C:\\Documents and Settings\\Administrator\\桌面\\input.txt","r",stdin);
sumToll=0;
for(i=0;i<24;i++){
cin>>toll[i];
sumToll+=toll[i];
}
cin>>n;
for(i=0;i
//cin>>rec[i].name>>month>>":">>rec[i].dd>>":">>rec[i].hh>>":">>rec[i].mm>>rec[i].status;
cin>>rec[i].name;
cin>>month;
getchar();
cin>>rec[i].dd;
getchar();
cin>>rec[i].hh;
getchar();
cin>>rec[i].mm;
cin>>rec[i].status;
rec[i].total=rec[i].dd*60*24+rec[i].hh*60+rec[i].mm;
}
qsort(rec,n,sizeof(rec[0]),cmp);
string str="";
int start,end,flag=0;
int theSame=0;
rec[n].name="";
double money=0.0f;
int minute;
double sum=0.0f;
int index=0;
for(i=0;i
if(str!=rec[i].name){
str=rec[i].name;
flag=0;
theSame=0;
index=0;
} else
theSame=1;//与前一个相同
if(rec[i].status[1]=='n'){//on
start=i;
flag=1;//1表示前面已经出现on了
}
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇CodeStyleConventions 代码风格约.. 下一篇我的POCO C++库学习 -- 任务

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目