思想: 模拟+枚举
以T为单位的枚举一定会超时;
若以m为单位 比较复杂
以 n 为单位 且为外侧循环, 以它的订单为内层循环(sort一下)
#include <bits/stdc++.h> using namespace std; #define ri register int #define M 100005 vector <int> p[M]; int n,m,T; int main(){ scanf("%d%d%d",&n,&m,&T); for(ri i=1;i<=m;i++) { int a,b; scanf("%d%d",&a,&b); p[b].push_back(a); } int ans=0; for(ri i=1;i<=n;i++) { sort(p[i].begin(),p[i].begin()+p[i].size()); int trmp=0; int cur=0; for(ri j=0;j<p[i].size();j++) { int a=p[i][j]; if(a!=trmp) cur-=(a-trmp-1); if(cur<0) cur=0; cur+=2; trmp=a; if(cur-(T-a)>=4&&cur>5) { ans++; break; } } } printf("%d",ans); return 0; }View Code
反思: 实现代码的时候 一定要确保你的代码 表达的 意思 和你想的一样,
和 模拟的情况一样,多举点栗子 去验证 代码。多想想各种情况。
样例过了,可能只是某一种情况而已,自己仔细想想,特别是模拟的题