답안 #1113702

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1113702 2024-11-17T07:32:01 Z thelegendary08 Fire (BOI24_fire) C++17
0 / 100
2 ms 336 KB
#include<bits/stdc++.h>
#define pb push_back
#define int long long
#define vi vector<int>
#define vvi vector<vector<int>>
#define pii pair<int, int>
#define vpii vector<pair<int, int>>
#define vc vector<char>
#define vb vector<bool>
#define mii map<int,int>
#define f0r(i,n) for(int i=0;i<n;i++)
#define FOR(i,k,n) for(int i=k;i<n;i++)
#define all(v) (v).begin(),(v).end()
#define rall(v) (v).rbegin(),(v).rend()
#define in(a) int a; cin>>a
#define in2(a,b) int a,b; cin>>a>>b
#define in3(a,b,c) int a,b,c; cin>>a>>b>>c
#define in4(a,b,c,d) int a,b,c,d; cin>>a>>b>>c>>d
#define vin(v,n); vi v(n); f0r(i,n){cin>>v[i];}
#define out(a) cout<<a<<'\n'
#define out2(a,b) cout<<a<<' '<<b<<'\n'
#define out3(a,b,c) cout<<a<<' '<<b<<' '<<c<<'\n'
#define out4(a,b,c,d) cout<<a<<' '<<b<<' '<<c<<' '<<d<<'\n'
#define vout(v) for(auto u : v){cout<<u<<' ';} cout<<'\n'
#define dout(a) cout<<a<<' '<<#a<<'\n'
#define dout2(a,b) cout<<a<<' '<<#a<<' '<<b<<' '<<#b<<'\n'
#define yn(x); if(x){cout<<"YES"<<'\n';}else{cout<<"NO"<<'\n';}
const int leg = 1e9 + 7;
const int mod = 998244353;
using namespace std;
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	//ifstream cin(".in");
	//ofstream cout(".out");
	in2(n,m);
	vpii v;
	f0r(i,n){
		in2(a,b);
		v.pb({a,b});
	}
	vpii normals;
	vpii overnights;
	f0r(i,n){
		if(v[i].first > v[i].second){
			overnights.pb(v[i]);
		}
		else normals.pb(v[i]);
	}
	vi stimes;
	f0r(i, normals.size()){
		stimes.pb(normals[i].first);
	}
	sort(stimes.begin(), stimes.end());
	mii ends;
	mii nxt;
	f0r(i, normals.size()){
		auto it = upper_bound(all(stimes), normals[i].second) - 1;
		int nx = *it;
		
		nxt[normals[i].first] = max(nxt[normals[i].first], nx);
	}
	f0r(i, normals.size()){
		ends[normals[i].first] = max(ends[normals[i].first], normals[i].second);
	}
	f0r(i, normals.size()){
		//dout2(normals[i].first, nxt[normals[i].first]);
		//out2(normals[i].first, ends[normals[i].first]);
	}
	vector<mii>jmp(18);
	f0r(i, normals.size()){
		jmp[0][normals[i].first] = nxt[normals[i].first];
	}
	FOR(i, 1, 18){
		f0r(j, normals.size()){
			jmp[i][normals[j].first] = jmp[i-1][jmp[i-1][normals[j].first]];
		}
	}
	//take each overnight as a start, if there are none return -1
	int ans = 4e18;
	f0r(i, overnights.size()){
		int l = overnights[i].second;
		int r = overnights[i].first;
		auto it = upper_bound(all(stimes), l) - 1;
		int nx = *it;
		int curans = 1;
		//dout(nx);
		if(nx >= l){
			int mn = 0;
			int cur = nx;
			if(ends[cur] >= r){
				curans++;
				ans = min(ans, curans);
			}
			else{
				for(int i = 17; i>=0; i--){
					if(cur < r && ends[jmp[i][cur]] < r){
						cur = jmp[i][cur];
						mn += i;
					}
				}
				//dout(cur);
				
				curans += mn+2;
				if(ends[nxt[cur]] >= r)ans = min(ans, curans);
			}
			
		}
		
	}
	if(ans == 4e18)out(-1);
	else out(ans);
}

Compilation message

Main.cpp: In function 'int main()':
Main.cpp:11:31: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   11 | #define f0r(i,n) for(int i=0;i<n;i++)
......
   51 |  f0r(i, normals.size()){
      |      ~~~~~~~~~~~~~~~~~         
Main.cpp:51:2: note: in expansion of macro 'f0r'
   51 |  f0r(i, normals.size()){
      |  ^~~
Main.cpp:11:31: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   11 | #define f0r(i,n) for(int i=0;i<n;i++)
......
   57 |  f0r(i, normals.size()){
      |      ~~~~~~~~~~~~~~~~~         
Main.cpp:57:2: note: in expansion of macro 'f0r'
   57 |  f0r(i, normals.size()){
      |  ^~~
Main.cpp:11:31: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   11 | #define f0r(i,n) for(int i=0;i<n;i++)
......
   63 |  f0r(i, normals.size()){
      |      ~~~~~~~~~~~~~~~~~         
Main.cpp:63:2: note: in expansion of macro 'f0r'
   63 |  f0r(i, normals.size()){
      |  ^~~
Main.cpp:11:31: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   11 | #define f0r(i,n) for(int i=0;i<n;i++)
......
   66 |  f0r(i, normals.size()){
      |      ~~~~~~~~~~~~~~~~~         
Main.cpp:66:2: note: in expansion of macro 'f0r'
   66 |  f0r(i, normals.size()){
      |  ^~~
Main.cpp:11:31: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   11 | #define f0r(i,n) for(int i=0;i<n;i++)
......
   71 |  f0r(i, normals.size()){
      |      ~~~~~~~~~~~~~~~~~         
Main.cpp:71:2: note: in expansion of macro 'f0r'
   71 |  f0r(i, normals.size()){
      |  ^~~
Main.cpp:11:31: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   11 | #define f0r(i,n) for(int i=0;i<n;i++)
......
   75 |   f0r(j, normals.size()){
      |       ~~~~~~~~~~~~~~~~~        
Main.cpp:75:3: note: in expansion of macro 'f0r'
   75 |   f0r(j, normals.size()){
      |   ^~~
Main.cpp:11:31: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   11 | #define f0r(i,n) for(int i=0;i<n;i++)
......
   81 |  f0r(i, overnights.size()){
      |      ~~~~~~~~~~~~~~~~~~~~      
Main.cpp:81:2: note: in expansion of macro 'f0r'
   81 |  f0r(i, overnights.size()){
      |  ^~~
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 336 KB Output is correct
2 Correct 1 ms 336 KB Output is correct
3 Incorrect 1 ms 336 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 336 KB Output is correct
2 Correct 1 ms 336 KB Output is correct
3 Incorrect 1 ms 336 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 336 KB Output is correct
2 Correct 1 ms 336 KB Output is correct
3 Incorrect 1 ms 336 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB Output is correct
2 Incorrect 1 ms 336 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB Output is correct
2 Incorrect 1 ms 336 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 336 KB Output is correct
2 Correct 1 ms 336 KB Output is correct
3 Incorrect 1 ms 336 KB Output isn't correct
4 Halted 0 ms 0 KB -