zoukankan      html  css  js  c++  java
  • 多校联合比赛总结(四)

    第四场比赛早就做完了,就是一直没写总结,感觉这次的题出的真的不好,后台测试数据的强弱就不说了,因为我们也没做出几道题,但是就给出的标准输出都是错的这一点来说真的不怎么样。还有感觉这次的题偏重于数学类的,让人摸不透出题人到底是想考察什么的,晕啊~

    这次比赛我们队共做出三题吧,最后那题还是ZJH随手写的,以为一定会超时的,在最后两分钟提交的,唉,这能说什么呢,RP吧~

    说说第四题吧,题意是给出一个人5*N的矩阵,让你从矩阵的每行去一个数,是的这五个数的和0,N为200 ,刚开始的时候,ZJH用二分查找做的,怎么样都过不了,后来想想或许Hash查找会快一点,然后改用Hash做的。

    代码:

    View Code
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <iostream>
    #include <algorithm>
    #define N 205
    #define M 40004
    using namespace std ;
    
    long long dat[5][N] , map[2][M] ;
    
    long long cal( int i , int j , int k )
    {
        return ( map[0][j] + map[1][k-1] + dat[4][i] );
    }
    
    int main()
    {
        int cas , n , i , j , k ;
        long long x ;
    
        scanf( "%d" , &cas );
        while( cas-- )
        {
            scanf( "%d" , &n );
            for ( i = 0 ; i < 5 ; i++ )
            {
                for( j = 0 ; j < n ; j++ )
                cin>>dat[i][j];
            }
            int np = n * n ;
            for( i = 0 ; i < 2 ; i++ )
            {
                for ( j = 0 ; j < n ; j++ )
                {
                    for ( k = 0 ; k < n ; k++ )
                    map[i][j*n+k] = dat[2*i][j] + dat[2*i+1][k] ;
                }
                sort( map[i] ,  map[i] + np );
            }
            //sort( dat[4] , dat[4] + n );
            int flag = 0 ;
            for ( i = 0 ; i < n && !flag ; i++ )
            {
                k = np - 1 ;
                for( j = 0 ; j < np && !flag ; j++ )
                {
                    while( k > 0 && cal ( i , j , k-1 ) >= 0 )
                    k--;
                    if ( cal ( i , j , k ) == 0 )
                    flag = 1 ;
                }
            }
            if ( flag )
            printf ( "Yes\n" );
            else
            printf ( "No\n" );
        }
        return 0 ;
    }

    然后就是第六题了,纯数学啊,一直没弄懂给出的样例是怎么得到的,赛后看了解题报告,哭了,真心没研究过容斥原理啊,好吧,直接用公式吧~

    代码:

    View Code
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <iostream>
    #include <algorithm>
    #define N 25
    using namespace std ;
    
    double p[N] , sum , ans ;
    int n ;
    void dfs( int index , int flag )
    {
        if ( index == n )
        return ;
        sum += p[index] ;
        if ( flag )
        ans += 1.0 / sum ;
        else
        ans -= 1.0 / sum ;
        dfs( index + 1 , !flag );
        sum -= p[index] ;
        dfs( index + 1 , flag );
        return ;
    }
    
    int main()
    {
        while( scanf( "%d" , &n ) != EOF )
        {
            for( int i = 0 ; i < n ; i++ )
            {
                scanf( "%lf" , &p[i] );
            }
            sum = 0.0 ;ans = 0.0 ;
            dfs( 0 , 1 );
            printf ( "%lf\n" , ans ) ;
        }
        return 0 ;
    }

    其他题没细研究,以后练到了再拿来练手吧~

  • 相关阅读:
    springmvc
    POJ 3683 Priest John's Busiest Day
    POJ 3678 Katu Puzzle
    HDU 1815 Building roads
    CDOJ UESTC 1220 The Battle of Guandu
    HDU 3715 Go Deeper
    HDU 3622 Bomb Game
    POJ 3207 Ikki's Story IV
    POJ 3648 Wedding
    HDU 1814 Peaceful Commission
  • 原文地址:https://www.cnblogs.com/misty1/p/2624853.html
Copyright © 2011-2022 走看看