#include <cstdio>#include <iostream>usingnamespacestd;
#define Name "qu"int a[1010], b[1010];
int sta[1010], que[1010], hep[1010];
int main(){
freopen( Name".in", "r", stdin);
freopen( Name".out", "w", stdout);
int n;
int p, q;
scanf( "%d", &n );
for ( int i = 1; i <= n; i++) scanf( "%d%d", &a[i], &b[i]);
q = 0;
for ( int i = 1; i <= n; i++){
if ( a[i] == 1 ) q++, sta[q] = b[i];
if ( a[i] == 2 ) if ( sta[q] != b[i] ) { printf("No\n"); break;}
else q--;
if ( q < 0 ) { printf("No\n"); break;}
if ( i == n ) printf("YES\n");
}
p = 1, q = 0;
for ( int i = 1; i <= n; i++){
if ( a[i] == 1 ) q++, sta[q] = b[i];
if ( a[i] == 2 ) if ( sta[p] != b[i] ) { printf( "No\n"); break;}
else p++;
if ( p > q+1 ) { printf("No\n"); break;}
if ( i == n ) printf( "YES\n");
}
q = 0, p = 0;
for ( int i = 1; i <= n; i++){
if ( a[i] == 1 ) q++, hep[q] = b[i];
if ( a[i] == 2 ) {
int maxn = 0;
for ( int j = 1; j <= q; j++)
if ( hep[j] > maxn) maxn = hep[j], p = j;
if ( maxn != b[i] ) { printf( "No\n"); break;}
else hep[p] = 0;
}
if ( i == n ) printf( "YES\n");
}
return0;
}
2.
这道题也是一道大水题,可以用贪心来做,以d值为关键字排序,在比较就好了。
#include <cstdio>#include <iostream>#include <algorithm>usingnamespacestd;
#define Name "ming"struct P{
int t, d;
}a[100010];
bool cmp( P a, P b){
return a.d < b.d ;
}
int main(){
freopen( Name".in", "r", stdin);
freopen( Name".out", "w", stdout);
int n;
scanf( "%d", &n);
for ( int i = 1; i <= n; i++) scanf( "%d%d", &a[i].t, &a[i].d);
sort( a+1, a+1+n, cmp);
int tim = 0;
int ans = 0;
for ( int i = 1; i <= n; i++){
tim += a[i].t;
ans = max( ans, max( 0, tim - a[i].d) );
}
printf( "%d", ans);
}