zoukankan      html  css  js  c++  java
  • 匹配情况hdu4451Dressing

    最近应用开发的过程中出现了一个小问题,顺便记录一下原因和方法--匹配情况

        http://acm.hdu.edu.cn/showproblem.php?pid=4451

        以下用了两种思路求解, 另外用了数组用set两种写法,3份代码,另外还有一种思路的数组方法没有写,感兴趣的朋友们可以尝试下;

        A;   
               应用两个数组,左边存和裤子不匹配的情况,右边统计鞋子和裤子不匹配的情况,然后求解每项的  ( n - lw[ i ] ) * ( k - rw[ i ] ) 的总和便可 ;

        B :  

                 应用两个数组,左边存和裤子不匹配的情况,右边统计鞋子和裤子不匹配的情况,然后求解总的情况, 减去和裤子不匹配的衣服 和减去和鞋子不匹配的鞋子数量,在加上减了两次的 ,既不匹配衣服又不匹配鞋子的情况 ,详细公式 如下: X 代表 满足左边数量(衣服) ,Y 代表裤子 ,Z代表鞋子;

        所以有 N* M * K  - X * Y - Y  * Z + X  * Z ;

        

    // File Name: hdu4451shuzu.c
    // Author: bo_jwolf
    // Created Time: 2013年05月24日 星期五 16:12:38
    
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<time.h>
    #include<math.h>
    
    
    int main()
    {
    
       freopen("cin.txt","r",stdin);
    //   freopen("output.txt","w",stdout);
    	int n , m , k , t , a , b ;
    	int lw[ 10005 ] , rw[ 10005 ] ;
    	char str1[ 20 ] , str2[ 20 ] ;
    	while( scanf( "%d%d%d" , &n , &m , &k ) )
    	{
    		if( n == 0 && m == 0  && k == 0 ) 
    			break ; 
    		memset( lw , 0 ,sizeof( lw ) ) ;
    		memset( rw , 0 ,sizeof( rw ) ) ;
    		scanf( "%d" , &t );
    		while( t-- )
    		{
    			scanf( "%s %d %s %d" , str1 , &a , str2 , &b ) ;
    			if( str1[ 0 ] == 'c' )
    			{
    				lw[ b ]++ ;
    			}
    			if( str1[ 0 ] == 'p' )
    			{
    				rw[ a ]++ ;
    			}
    		}
    		int ans = 0 ;
    		for(int i = 1 ; i <= m ; i++ )
    		{
    			ans += (n - lw[ i ] )*(k -  rw[ i ] );
    		}
    		printf( "%d\n" , ans );
    	}
    return 0 ;
    }
    // File Name: hdu4451.c
    // Author: bo_jwolf
    // Created Time: 2013年05月24日 星期五 14:52:33
    
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<time.h>
    #include<math.h>
    #include<iostream>
    #include<set>
    
    using namespace std ;
    const int maxn = 1005 ;
    int main()
    {
    	set<int> lw[ maxn ] ;
    	set<int> rw[ maxn ] ;
      // freopen("cin.txt","r",stdin);
      // freopen("output.txt","w",stdout);
       int n , m , k , t ,a,b;
    	char  str1[ 100 ] , str2[ 100 ] ;
       while( scanf("%d%d%d" ,&n , &m , &k ) != EOF && (n | m | k ) )
       {
    	   for(int  i = 0 ; i <= m ;i++ )
    	   {
    		   lw[ i ].clear() ;
    		   rw[ i ].clear();
    		 //  cout<< lw[i].size() << rw[i].size() <<"bbbbbbbbbbbb\n";
    	   }
    		scanf( "%d" , &t );
    		while( t-- )
    		{
    			scanf( "%s %d %s %d" ,str1 , &a , str2 , &b ) ;
    			if(! strcmp( str1 ,"clothes") ) 
    			{
    				if( lw[ b ] .find( a ) == lw[ b ].end() ) 
    					lw[ b ].insert( a ) ;
    			}
    			else
    			//	if( !strcmp( str2 , "shoes" ) )
    				{
    					if( rw[ a ].find( b ) == rw[ a ].end())
    						rw[ a ].insert( b ) ;
    				}
    			/*	else
    					while(true)
    						;*/
    		}
    		int ans = 0 ;
    		for( int i = 1 ; i <= m ; i++ )
    		{/*
    			printf( "%d\n" ,n - lw[ i ].size() );
    			printf( "%d\n" ,m -rw[i ].size() );
    			printf( "%daaaaaaaaaaaaaaa\n" , ans ) ;
    		*/ans += ( n - lw[ i ].size() )* ( k - rw[ i ].size() );
    			//cout << ans << endl;
    		}
    	printf( "%d\n" , ans ) ;
       }
    return 0 ;
    }
        每日一道理
    哦,妈妈 亲爱的妈妈,您对我的爱比太阳还要炽热,比白雪更为圣洁。在我成长的道路上,您就是女儿夏日里的浓荫,冬天里的炭火,您更是女儿人生路上的一盏明灯。
    // File Name: hdu4451.c
    // Author: bo_jwolf
    // Created Time: 2013年05月24日 星期五 14:52:33
    
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<time.h>
    #include<math.h>
    #include<iostream>
    #include<set>
    
    using namespace std ;
    const int maxn = 1005 ;
    int main()
    {
    	set<int> lw[ maxn ] ;
    	set<int> rw[ maxn ] ;
       freopen("cin.txt","r",stdin);
      // freopen("output.txt","w",stdout);
       int n , m , k , t ,a,b;
    	char  str1[ 100 ] , str2[ 100 ] ;
       while( scanf("%d%d%d" ,&n , &m , &k ) != EOF && (n | m | k ) )
       {
    	   for(int  i = 1 ; i <= m ;i++ )
    	   {
    		   lw[ i ].clear() ;
    		   rw[ i ].clear();
    		 //  cout<< lw[i].size() << rw[i].size() <<"bbbbbbbbbbbb\n";
    	   }
    		scanf( "%d" , &t );
    		while( t-- )
    		{
    			scanf( "%s %d %s %d" ,str1 , &a , str2 , &b ) ;
    			if(! strcmp( str1 ,"clothes") ) 
    			{
    				if( lw[ b ] .find( a ) == lw[ b ].end() ) 
    					lw[ b ].insert( a ) ;
    			}
    			else
    			//	if( !strcmp( str2 , "shoes" ) )
    				{
    					if( rw[ a ].find( b ) == rw[ a ].end())
    						rw[ a ].insert( b ) ;
    				}
    			/*	else
    					while(true)
    						;*/
    		}
    		int ans = n * m * k;
    		for( int i = 1 ; i <= m ; i++ )
    		{/*
    			printf( "%d\n" ,n - lw[ i ].size() );
    			printf( "%d\n" ,m -rw[i ].size() );
    			printf( "%daaaaaaaaaaaaaaa\n" , ans ) ;
    		*///ans += ( n - lw[ i ].size() )* ( k - rw[ i ].size() );
    			//cout << ans << endl;
    			const int x = lw[i].size();
    			const int y = rw[i].size();
    			ans = ans - x * k - y * n + x * y;
    		}
    	printf( "%d\n" , ans ) ;
       }
    return 0 ;
    }

    文章结束给大家分享下程序员的一些笑话语录: 这个世界上只有10种人:懂得二进制的和不懂得二进制的。

    --------------------------------- 原创文章 By
    匹配和情况
    ---------------------------------

  • 相关阅读:
    类中静态方法
    子类执行父类的构造方法
    MySQL grant命令使用
    Jmeter中引入class文件的方法
    了解CSS/CSS3原生变量var (转)
    Vue 开源项目库汇总(转)
    史上最全常用正则表达式 (转)
    如何实现CSS限制字数,超出部份显示点点点...
    我的博客园第一篇文章......
    平衡二叉树,AVL树之图解篇
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3097663.html
Copyright © 2011-2022 走看看