题目描述

思路
首先,时间戳是毫秒!小于1s应该是小于1k
第一个一定算连击,别看题目很复杂,其实思路很简单:当前敲击时间-上一个敲击时间
代码
就是个模拟
注意当前若是连击断了,也是下一个连击的开始,所以要初始化1
以及求的是最大连击数,要取最大值
cpp
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 2e5+10;
int a[N];
int b[N]; //前缀和
signed main()
{
//读入
char a, b;
int time = 0;
int lasttime= 0; //第一次算一连击了
int maxx = -1;
int ans = 0;
while(cin >> a >> b >> time)
{
if(a == b && time - lasttime <= 1000 )
{
ans++;
maxx = max(ans, maxx); //找最大的次数
}
else
{
ans = 1; //连击没了,从当前开始设为1
}
lasttime = time; //迭代相减
}
cout<<maxx<<endl;
return 0;
}
思路
沉下心来,把题目读懂,不要看输入在文件里,就觉得是个难题了