自搬
2024-06-30 18:00:32
发布于:上海
1阅读
0回复
0点赞
终于 A 了这道题,不容易啊。
(点进这道题之前它还是黄的呢,怎么突然绿了?是我眼花了吗?)
思路
模拟即可。首先把一行里的数字都读出来,全部压进一个 long long。因为日志信息里没有数字,所以可以少判很多。然后滑动窗口进行判断,因为日志时间有序,所以令窗口大小为 ,只需判断首尾之差是否大于 即可。求差最麻烦了,要注意:
- 全部是 2012 年的日志,而 2012 年是个闰年。
- 求一天在一年中是第几天时,月份要预处理前缀和。
- 变量名不要打错。
然后就是码代码时间了。
实现
别看它很长,有一大半都是在读写。
#include <cstdio>
using namespace std;
#define ll long long
#define ull unsigned long long
namespace io{
const int size=(1<<20)+1;
char buf[size],*p1=buf,*p2=buf;
char buffer[size];
int op1=-1;
const int op2=size-1;
inline char readchar() {
if(p1!=p2) {
return *p1++;
}
return p1==(p2=(p1=buf)+fread(buf,1,size-1,stdin))?EOF:*p1++;
}
inline void flush() {
fwrite(buffer,1,op1****tdout),op1=-1;
}
inline void writechar(const char &x) {
if(op1==op2) flush();
buffer[++op1]=x;
}
#ifndef ONLINE_JUDGE
#define gc getchar
#else
#define gc readchar
#endif
#define pc writechar
#define el pc(10)
#define sp pc(32)
inline int readi(){
int x=0;bool w=0;
char ch=gc();
while(ch<'0'||ch>'9'){
if(ch=='-') w=1;
ch=gc();
}
while(ch>='0'&&ch<='9'){
x=(x<<3)+(x<<1)+(ch^48);
ch=gc();
}
return w?-x:x;
}
inline ll readull(){
ll x=0;
char ch=gc();
while(ch>=32){
if(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+(ch^48);
ch=gc();
}
if(ch==-1) x=-x;
return x;
}
void writei(int x){
if(x<0) pc('-'),x=-x;
if(x>9) writei(x/10);
pc((x%10)^48);
}
};// io
using namespace io;
const int months[]={0,31,29,31,30,31,30,31,31,30,31,30,31},
pre[]={0,31,60,91,121,152,182,213,244,274,305,335,366};
inline ll td(ll x,ll y){
int xm=x/100000000%100,ym=y/100000000%100;
int xd=pre[xm-1]+x/1000000%100,yd=pre[ym-1]+y/1000000%100;
int xh=x/10000%100,yh=y/10000%100;
int xmi=x/100%100,ymi=y/100%100;
int xs=xh*3600+xmi*60+x%100,ys=yh*3600+ymi*60+y%100;
return (0ll+xd)*86400+xs-((0ll+yd)*86400+ys);
}
ll a[50005];
int main(){
int n=readi(),m=readi();
int cnt=0;
while((a[++cnt]=readull())>0);
if(a[cnt]==0)cnt--;
else a[cnt]=-a[cnt];
for(int i=0;i<=cnt-m;i++){
// writel(td(a[i+m],a[i+1]));el;
if(td(a[i+m],a[i+1])<n){
#define i i+m
writei(2012);pc('-');
pc(a[i]/1000000000%10^48);
pc(a[i]/100000000%10^48);
pc('-');
pc(a[i]/10000000%10^48);
pc(a[i]/1000000%10^48);
sp;
pc(a[i]/100000%10^48);
pc(a[i]/10000%10^48);
pc(':');
pc(a[i]/1000%10^48);
pc(a[i]/100%10^48);
pc(':');
pc(a[i]/10%10^48);
pc(a[i]%10^48);
el;
flush();
return 0;
#undef i
}
}
writei(-1);
flush();return 0;
}
这里空空如也
有帮助,赞一个