A:
思路:一开始有点懵逼,理解错题意了}, 由于是顺序分配,因此前面的人可以选择的条件更多,后面的人更少,我们从后向前遍历即可
# include <bits/stdc++.h> using namespace std; typedef long long ll;
typedef pair< ll, ll> PII;
const int N = 2e5 + 10 ;
const int MOD = 998244353 ;
const int INF = 0X3F3F3F3F ;
const int dx[ ] = { - 1 , 1 , 0 , 0 , - 1 , - 1 , + 1 , + 1 } ;
const int dy[ ] = { 0 , 0 , - 1 , 1 , - 1 , + 1 , - 1 , + 1 } ;
const int M = 1e9 + 7 ; PII p[ N] ;
ll a[ N] ;
ll n, oo;
int main ( )
{ cin >> n >> oo; for ( int i = 1 ; i <= n; i ++ ) { cin >> p[ i] . first; } ll s = 0 ; for ( int i = 1 ; i <= n; i ++ ) { cin >> p[ i] . second; s += p[ i] . first / p[ i] . second; } if ( s < oo) { for ( int i = 1 ; i <= n; i ++ ) { cout << 0 << " " ; } cout << endl; } else { ll res = 0 ; for ( int i = n; i >= 1 ; i -- ) { ll o = p[ i] . first / p[ i] . second; res += o; if ( res >= oo) { a[ i] = o - ( res - oo) ; break ; } else a[ i] = p[ i] . first / p[ i] . second; } for ( int i = 1 ; i <= n; i ++ ) cout << a[ i] << ' ' ; } return 0 ;
}
C:
思路:我们可以知道对于矩形的四个顶点(x1, y1), (x2, y2), (x3, y3), (x4, y4), x1 == x2, x3 == x4, y1 == y3, y2 == y4, 因此我们只需要找出来两两相等的数即可,然后排个序,找出前两个顶点和最后两个顶点即可,此时面积即为最大值
# include <bits/stdc++.h> using namespace std; typedef long long ll;
typedef pair< ll, ll> PII;
const int N = 2e5 + 10 ;
const int MOD = 998244353 ;
const int INF = 0X3F3F3F3F ;
const int dx[ ] = { - 1 , 1 , 0 , 0 , - 1 , - 1 , + 1 , + 1 } ;
const int dy[ ] = { 0 , 0 , - 1 , 1 , - 1 , + 1 , - 1 , + 1 } ;
const int M = 1e9 + 7 ; int t; ll a[ N] ;
int main ( )
{ cin >> t; while ( t -- ) { int n; cin >> n; map< ll, ll> ma; for ( int i = 1 ; i <= n; i ++ ) { ll x; cin >> x; ma[ x] ++ ; } int k = 0 ; for ( auto it : ma) { ll i = it. second; for ( int j = 1 ; j <= i / 2 ; j ++ ) a[ ++ k] = it. first; } if ( k < 4 ) cout << "NO" << endl; else { cout << "YES" << endl; ll x1 = a[ 1 ] , y1 = a[ 2 ] ; ll x2 = a[ 1 ] , y2 = a[ k] ; ll x3 = a[ k - 1 ] , y3 = a[ 2 ] ; ll x4 = a[ k - 1 ] , y4 = a[ k] ; cout << x1 << " " << y1 << " " << x2 << " " << y2 << ' ' << x3 << " " << y3 << " " << x4 << " " << y4 << endl; } } return 0 ;
}
J:
签到题,直接模拟即可
# include <bits/stdc++.h> using namespace std; typedef long long ll;
typedef pair< ll, ll> PII;
const int N = 2e5 + 10 ;
const int MOD = 998244353 ;
const int INF = 0X3F3F3F3F ;
const int dx[ ] = { - 1 , 1 , 0 , 0 , - 1 , - 1 , + 1 , + 1 } ;
const int dy[ ] = { 0 , 0 , - 1 , 1 , - 1 , + 1 , - 1 , + 1 } ;
const int M = 1e9 + 7 ; int t; ll a[ N] ;
int main ( )
{ cin >> t; ll s = 0 ; while ( t -- ) { char c; int x; cin >> c >> x; if ( c == 'P' ) { s += x; } else { if ( s < x) cout << "YES" << endl; else cout << "NO" << endl; s -= x; s = max ( ( ll) 0 , s) ; } } return 0 ;
}
L:
思路:(整体分配法)我们的木棍长度为60, 对于18和21, 我们可以这样分配(18, 18, 18)(18, 18, 21)(18, 21, 21), 因此对于前两个能整除3的部分我们直接的求出s1 = 2 * n / 3, 对于有25的部分, 无论如何分配我们最多只能制作2个, 还需要在加上前两个剩余的数即可, s2 = (2 * n % 3 + n + 1) / 2;(向上取整)
# include <bits/stdc++.h> using namespace std; typedef long long ll;
typedef pair< ll, ll> PII;
const int N = 2e5 + 10 ;
const int MOD = 998244353 ;
const int INF = 0X3F3F3F3F ;
const int dx[ ] = { - 1 , 1 , 0 , 0 , - 1 , - 1 , + 1 , + 1 } ;
const int dy[ ] = { 0 , 0 , - 1 , 1 , - 1 , + 1 , - 1 , + 1 } ;
const int M = 1e9 + 7 ; int t; int main ( )
{ ll n; cin >> n; cout << n * 2 / 3 + ( n * 2 % 3 + 1 + n) / 2 << endl; return 0 ;
}
N:
签到题, 模拟即可
# include <bits/stdc++.h> using namespace std; typedef long long ll;
typedef pair< ll, ll> PII;
const int N = 2e5 + 10 ;
const int MOD = 998244353 ;
const int INF = 0X3F3F3F3F ;
const int dx[ ] = { - 1 , 1 , 0 , 0 , - 1 , - 1 , + 1 , + 1 } ;
const int dy[ ] = { 0 , 0 , - 1 , 1 , - 1 , + 1 , - 1 , + 1 } ;
const int M = 1e9 + 7 ; int main ( )
{ int t; cin >> t; while ( t -- ) { string s; cin >> s; if ( s[ 0 ] < s[ 2 ] ) cout << s[ 0 ] << '<' << s[ 2 ] << endl; if ( s[ 0 ] > s[ 2 ] ) cout << s[ 0 ] << '>' << s[ 2 ] << endl; if ( s[ 0 ] == s[ 2 ] ) cout << s[ 0 ] << '=' << s[ 2 ] << endl; } return 0 ;
}