日常训练赛(国庆)

A.

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

int n;

int main()
{
    freopen("ate.in", "r", stdin);
    freopen("ate.out", "w", stdout);
    while(~scanf("%d", &n))
    {
        int ans = 0;
        for(int i = 1; i < 100; i++)
        for(int j = 1; j < 100; j++)
        if(n == i + j) ans++;
        printf("%d\n", ans);
    }
    return 0;
}

B.

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;
#define N 5000 + 10

int m, n, a, b;
char s[N];

int main()
{
    freopen("black.in", "r", stdin);
    freopen("black.out", "w", stdout);
    while(~scanf("%d%d%d%d", &m, &n, &a, &b))
    {
        int cn1 = 0, cn2 = 0;
        int flag = 0;
        scanf("%s", s + 1);
        int len = strlen(s + 1);

        for(int i = 1; i <= len; i++)
        {
            //cout << i << " : " << cn1 << "  " << cn2 << endl;
            if(s[i] == '*')
            {
                cn1++;
                if(!cn2) cn2 = 1;
                else
                {
                    if(s[i - 1] != '*')
                        flag = 3;
                    else cn2++;
                }
            }
        }

        //cout << cn1 << " : " << cn2 << endl;

        if(cn1 != cn2) flag = 3;
        if(flag == 3)
        {
            printf("Impossible\n");
            continue;
        }

        if(cn2 == 0)
        {
            if((a <= b - 1 && a <= m - b) || (b - 1 >= (a + 1)) || (m - b >= a + 1) || (a == b - 1 && n > a) || (a == m - b && n > a))
            flag = 2;
            else if(a <= b - 1 || a <= m - b)
            flag = 1;
            else flag = 3;

            //cout << flag  << endl;
        }
        else if(cn2 != a) flag = 3;
        else
        {
            if(b == 1 || b == m || a == 1 || a == m) flag = 1;
            else flag = 2;
        }

        if(flag == 1)
        {
            printf("Unique\n");
            continue;
        }
        if(flag == 2)
        {
            printf("Ambiguous\n");
            continue;
        }
        if(flag == 3)
        {
            printf("Impossible\n");
        }
    }
    return 0;
}

/*

4 4 4 2
.***


4 4 2 1
**.*

4 4 2 2
.**.

4 4 3 2
.*.*

4 4 1 2
..*.
4 4 2 2
..**
4 4 3 2
.*.*

*/

D.

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
using namespace std;
typedef pair<int, int> PII;
const int MAXN = 1000 + 10;

struct Node { int val, id; };
Node a[MAXN];
vector<int> vec[MAXN];
int n;

bool cmp1( const Node &a, const Node &b ) {
    return a.val < b.val;
}

int main() {
    freopen( "dice.in", "r", stdin );
    freopen( "dice.out", "w", stdout );
    double ans = 0;
    int tot = 0;
    scanf( "%d", &n );
    for( int i = 0; i < n; ++i ) {
        scanf( "%d", &a[i].val );
        a[i].id = i;
        tot += a[i].val;
    }
    sort( a, a + n, cmp1 );
    for( int i = 0; i < n; ++i ) {
        int id = a[i].id;
        int sum = 0;
        for( int j = 0; j < a[i].val; ++j ) {
            vec[id].push_back( tot );
             sum += tot;
            --tot;
        }
        ans += 1.0 * sum / a[i].val;
    }
    printf( "%.5f\n", ans );
    for( int i = 0; i < n; ++i ) {
        sort( vec[i].begin(), vec[i].end() );
        printf( "%d", vec[i][0] );
        for( int j = 1; j < vec[i].size(); ++j ) {
            printf( " %d", vec[i][j] );
        }
        puts( "" );
    }
    return 0;
}

F.

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int MAXN = 1000 + 10;

int n, c, a;
int val[MAXN];
char t[MAXN];

int main() {
    freopen( "flat.in", "r", stdin );
    freopen( "flat.out", "w", stdout );
    int tot = 0;
    val[0] = val[1] = val[2] = 0;
    scanf( "%d%d", &n, &c );
    for( int i = 0; i < n; ++i ) {
        scanf( "%d%s", &a, t );
        if( t[0] == 'b' && t[1] == 'a' && t[2] == 'l' ) val[2] += a;
        if( t[0] == 'b' && t[1] == 'e' ) val[1] += a;
        else val[0] += a;
        tot += a;
    }
    printf( "%d\n", tot );
    printf( "%d\n", val[1] );
    printf( "%lf\n", ( 1.0 * tot - 1.0 * val[2] / 2.0 ) * c );
    return 0;
}
J.

#include <algorithm>
#include <iostream>
#include <cstdio>
using namespace std;
const int INF = 0x3FFFFFFF;
const int MAXN = 100000 + 10;

struct Node {
    int a, b;
    bool operator < ( const Node &t ) const {
        return a == t.a ? b < t.b : a < t.a;
    }
};
Node node[MAXN];
int L[MAXN], R[MAXN], a[MAXN];
long long cnt;

void _merge( int l, int m, int r ) {
    int i, j, k;
    int n1, n2;
    n1 = m - l + 1;
    n2 = r - m;
    for( i = 0; i < n1; ++i )
        L[i] = a[l + i];
    for( i = 0; i < n2; ++i )
        R[i] = a[m + 1 + i];
    L[n1] = INF;
    R[n2] = INF;
    i = j = 0;
    for( k = l; k <= r; ++k ) {
        if( L[i] <= R[j] )
            a[k] = L[i++];
        else {
            a[k] = R[j++];
            cnt += n1 - i;
        }
    }
    return ;
}

void _merge_sort( int l, int r ) {
    if( l < r ) {
        int m = ( l + r ) / 2;
        _merge_sort( l, m );
        _merge_sort( m + 1, r );
        _merge( l, m, r );
    }
    return ;
}

int main() {
    freopen( "john.in", "r", stdin );
    freopen( "john.out", "w", stdout );
    int n;
    scanf( "%d", &n );
//    while( ~scanf( "%d", &n ) && n ) {
    for( int i = 0; i < n; ++i ) {
        scanf( "%d%d", &node[i].a, &node[i].b );
    }
    sort( node, node + n );
    cnt = 0;
    for( int i = 0; i < n; ++i )
        a[i] = node[i].b;
    _merge_sort( 0, n - 1 );
    printf( "%I64d\n", cnt );
//    }
    return 0;
}



你可能感兴趣的:(ACM)