关于三分
查看原帖
关于三分
281668
FOX_konata楼主2021/10/26 21:24

RT

我们机房大佬在车上的时候就说这题是三分+模拟,于是身为蒟蒻的我马上就回来学了三分,写出来后被WA成了65,求助

#include <bits/stdc++.h>
#define For( i , j , k ) for( ll i = ( j ) ; i <= ( k ) ; ++ i )
#define For__( i , j , k ) for( ll i = ( j ) ; i >= ( k ) ; -- i )
#define Fore( i , j , k ) for( ll i = j ; i ; i = k )
using namespace std;
#define ll long long
#define lf double
#define llf long double
template < typename T >
inline void read( T &num ){
	num = 0 ; T f = 1 ; char c = ' ';
	while( c < '0' || c > '9' ) if( ( c = getchar() ) == '-' ) f = -1;
	while( c >= '0' && c <= '9' ) num = ( num << 1 ) + ( num << 3 ) + ( c ^ 48 ) , c = getchar();
	num *= f;
	return ;
}
char write_use_string[ 1035 ] , write_use_cnt;
template < typename T >
inline void write_no_string( T num ){
	do{
		write_use_string[ ++ write_use_cnt ] = num % 10 + '0';
		num /= 10;
	}while( num );
	For__( i , write_use_cnt , 1 )
		putchar( write_use_string[ i ] );
	return ;
}
template < typename T >
inline void write( T num , string printf_str ){
	if( num < 0 ) putchar( '-' ) , num = -num;
	write_use_cnt = 0;
	write_no_string( num );
	printf( "%s" , printf_str.c_str() );
	return ;
}
const ll maxn = 2e5 + 5;
ll n , m1 , m2;
struct Node{
	ll times , id;
	bool val;
	Node( ll times_ = 0 , bool val_ = false , ll id_ = 0 ){
		times = times_;
		val = val_;
		id = id_;
	}
	bool operator < ( const Node &x ) const{
		return times < x.times;
	}
}a[ maxn << 1 ] , b[ maxn << 1 ];
bool visit[ maxn ];
inline ll check( ll x ){//判断 
	ll xa = x , xb = n - x;
	ll ans = 0;
	For( i , 1 , m1 )
		visit[ i ] = false;
	For( i , 1 , m1 << 1 ){
		if( !a[ i ].val && xa ){
			-- xa;
			++ ans;
			visit[ a[ i ].id ] = true;
		}
		else if( a[ i ].val && visit[ a[ i ].id ] )
			++ xa;
	}
	For( i , 1 , m2 )
		visit[ i ] = false;
	For( i , 1 , m2 << 1 ){
		if( !b[ i ].val && xb ){
			-- xb;
			++ ans;
			visit[ b[ i ].id ] = true;
		}
		else if( b[ i ].val && visit[ b[ i ].id ] )
			++ xb;
	}
	return ans;
}
int main(){
	ll x;
	read( n ) , read( m1 ) , read( m2 );
	For( i , 1 , m1 ){
		read( x );
		a[ ( i << 1 ) - 1 ] = Node( x , false , i );
		read( x );
		a[ i << 1 ] = Node( x , true , i );
	}
	For( i , 1 , m2 ){
		read( x );
		b[ ( i << 1 ) - 1 ] = Node( x , false , i );
		read( x );
		b[ i << 1 ] = Node( x , true , i );
	}//读入 
	sort( a + 1 , a + ( m1 << 1 ) + 1 );
	sort( b + 1 , b + ( m2 << 1 ) + 1 );//排序 
	ll l = 0 , r = n;
	while( r - l >= 3 ){//三分 
		ll lmid = l + ( r - l ) / 3 , rmid = r - ( r - l ) / 3;
		if( check( lmid ) < check( rmid ) )
			l = lmid;
		else
			r = rmid;
	}
	write( max( check( l + r >> 1 ) , max( check( l ) , check( r ) ) ) , "\n" );
	return 0;
}

评测记录:

https://www.luogu.com.cn/record/61023346

2021/10/26 21:24
加载中...