# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1090690 | 2024-09-18T15:28:35 Z | BigBadBully | Fire (BOI24_fire) | C++17 | 0 ms | 0 KB |
#include <bits/stdc++.h> #define ff first #define ss second #define int long long #define pii pair<int, int> #define ff first #define ss second using namespace std; const int inf = 1e17; const int mod = 998244353; int solve2(int n,int m,vector<pii> v) { for (int i = 0; i< n; i++) { while(v[i].ff>v[i].ss) v[i].ss+=m; } sort(v.begin(),v.end()); { vector<bool> del(n); int maxi = 0; for (int i = 0; i < n;i ++) { if (v[i].ss <= maxi) del[i] = 1; maxi = max(maxi,v[i].ss); } vector<pii> neu; for (int i = 0; i < n; i++) if (!del[i]) neu.push_back(v[i]); n = neu.size(); v = neu; } { vector<bool> del(n); int mini = v[n-1].ss; for (int i = n-1; i >= 0;i--) { if (v[i].ff >= mini) del[i] = 1; mini = min(mini,v[i].ff); } vector<pii> neu; for (int i = 0; i < n; i++) if (!del[i]) neu.push_back(v[i]); n = neu.size(); v = neu; } for (int i = 0; i< n;i++) v[i].ss%=m; /*for (int i = 0; i < n; i++) cout << v[i].ff << ' ' << v[i].ss << '\n';*/ int prev = v[0].ss; int used = 1; if (v[0].ff != 0) { cout << -1 << '\n'; return; } for (int i = 1; i < n; i++) { if (v[i].ff > prev) { used++; prev = v[i-1].ss; if (v[i].ff > prev) { cout << -1 << '\n'; return; } } if (prev != 0 && v[i].ss == 0) { used++; prev = inf; break; } } if(prev == inf) cout << used << '\n'; else cout << -1 << endl; } signed main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n,m; cin >> n >> m; vector<pii> v(n); for (int i = 0; i < n; i++) cin >> v[i].ff >> v[i].ss; cout << solve2(n,m,v) << endl; }