• 多校联合比赛总结(四)


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

    这次比赛我们队共做出三题吧,最后那题还是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 ;
    }

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

  • 相关阅读:
    windows cmd 快速编辑 模式
    navicat 15 学习版
    mysql 参数设置
    cat 高亮
    基本概念(4)——调试器
    基本概念(3)——cmake、qmake
    基本概念(2)——make、ninja、nmake、jom
    基本概念(1)——编译器
    LCP 19. 秋叶收藏集
    leetcode 117 填充每个节点的下一个右侧节点指针 II
  • 原文地址:https://www.cnblogs.com/misty1/p/2624853.html
Copyright © 2020-2023  润新知