去年MLE代码
#include<bits/stdc++.h>
using namespace std;
struct P {
int t,n;
int k[1000];
} p[100000];
int n,x[100000][1000];
int f(int t){
int s=0;
for(int i=0;i!=100000;i++){
int l=0;
for(int j=1;j!=x[i][0]+1;j++){
l|=(t-86400<x[i][j]&&x[i][j]<=t);
if(l==1)break;
}
s+=l;
}
return s;
}
int main() {
// freopen("port.in","r",stdin);
// freopen("port.ans","w",stdout);
cin>>n;
for(int i=0; i!=n; i++) {
cin>>p[i].t>>p[i].n;
for(int j=0; j!=p[i].n; j++) {
cin>>p[i].k[j];
x[p[i].k[j]][x[p[i].k[j]][0]+1]=p[i].t;
x[p[i].k[j]][0]++;
}
}
for(int i=0;i!=n;i++)cout<<f(p[i].t)<<endl;
return 0;
}
今年TLE代码
#include<bits/stdc++.h>
using namespace std;
struct P{
int t,x;
};
deque<P> q;
stack<P> st;
set<int> s;
int n,ans[100000],kmpt,kmpk,kmp;
int main() {
cin>>n;
for(int i=0;i!=n;i++){
cin>>kmpt>>kmpk;
for(int j=0;j!=kmpk;j++){
cin>>kmp;
q.push_back({kmpt,kmp});
}
while(!q.empty())if(q.front().t+86400<=kmpt)q.pop_front();else break;
while(!q.empty()){
s.insert(q.front().x);
st.push(q.front());
q.pop_front();
}
ans[i]=s.size();
s.clear();
while(!st.empty()){
q.push_front(st.top());
st.pop();
}
}
for(int i=0;i!=n;i++)cout<<ans[i]<<endl;
return 0;
}
优化后代码
#include<bits/stdc++.h>
using namespace std;
struct P{
int t;
set<int> x;
}kmpp;
deque<P> q;
stack<P> st;
set<int> s;
int n,ans[100000],kmpt,kmpk,kmp;
int main() {
cin>>n;
for(int i=0;i!=n;i++){
cin>>kmpt>>kmpk;
kmpp.x.clear();
for(int j=0;j!=kmpk;j++){
cin>>kmp;
kmpp.x.insert(kmp);
}
kmpp.t=kmpt;
q.push_back(kmpp);
while(!q.empty())if(q.front().t+86400<=kmpt)q.pop_front();else break;
while(!q.empty()){
for(set<int>::iterator it=q.front().x.begin();it!=q.front().x.end();++it)
s.insert(*it);
st.push(q.front());
q.pop_front();
}
ans[i]=s.size();
s.clear();
while(!st.empty()){
q.push_front(st.top());
st.pop();
}
}
for(int i=0;i!=n;i++)cout<<ans[i]<<endl;
return 0;
}
dalao求调.
如果@tall_buildin 看见了,就当没看到。