PAT 乙级 1028

来源:互联网 发布:360vr全景通源码 编辑:程序博客网 时间:2024/05/16 03:14

一开始我是用string字符串做的,但只得到15分,最后是运算超时。

贴一下代码:

#include<iostream>#define maxn 100005 using namespace std;struct nood{string name;string days;int num; };int main(){int n;nood c[maxn];cin>>n;//string s;//string s1="2014/09/06",s2="1814/09/06";int m=0;int q,p;string ymin="9999/99/99",ymax="0000/00/00";for(int i=0;i<n;i++){//scanf("%s",c[i].name); cin>>c[i].name;cin>>c[i].days;//c[i].days=s;if(c[i].days>s1||c[i].days<s2){  m++;}else{if(c[i].days>ymax){ymax=c[i].days;q=i;}if(c[i].days<ymin){ymin=c[i].days;p=i;}}    }cout<<n-m<<" "<<c[p].name<<" "<<c[q].name<<endl;return 0;}
后来看到大神用一种方法,把字符串变成一个数,这样,题目好解太多,不用再管有多少天了,是不是润年等等。

ac要注意可能一个人都不符合条件。

贴上代码:

#include<iostream>#define maxn 100005using namespace std;struct nood{string name;int year,month,day;};nood c[maxn];int main(){int n;cin>>n;int m=0;int max=20140906;int min=18140906;int maxium=0;int minium=99999999;int q,p;for(int i=0;i<n;i++){cin>>c[i].name;scanf("%d/%d/%d",&c[i].year,&c[i].month,&c[i].day);int g=(c[i].year*10000+c[i].month*100+c[i].day);if(g>max||g<min)  m++;else{if(g>maxium){q=i;maxium=g;}if(g<minium){p=i;minium=g;}}  }if(n-m!=0)  cout<<n-m<<" "<<c[p].name<<" "<<c[q].name<<endl;else  cout<<"0"<<endl;  return 0;}




原创粉丝点击