poj 1029 False coin

经典的从一堆真硬币中称出一个假硬币的题
#include <stdio.h>
#include 
<string.h>

bool flag[1010];
bool temp[1010];
int getnum[1010];
int dy[1010], xy[1010];
int n, m;

void init()
{
    memset(flag, 
0sizeof(flag));
    memset(dy, 
0sizeof(dy));
    memset(xy, 
0sizeof(xy));
}

int work()
{
    
int cnt = 0, k;
    
for ( int i = 1 ; i <= n ; i++ )
    {
        
if ( !flag[i] )
        {
            k 
= i;
            cnt
++;
        }
        
if ( cnt > 1 )
            
return 0;
    }
    
return k;
}

int main()
{
    
while ( 2 == scanf("%d%d"&n, &m) )
    {
        init();
        
while ( m-- )
        {
            
int num, i;
            
char ope;
            scanf(
"%d"&num);
            
for ( i = 0 ; i < 2*num ; i++ )
                scanf(
"%d", getnum+i);
            scanf(
"%*c%c"&ope);
            
if ( '=' == ope )
                
for ( i = 0 ; i < 2*num ; i++ )
                    flag[getnum[i]]
= 1;
            
else if ( '>' == ope )
            {
                memset(temp, 
0sizeof(temp));
                
for ( i = 0 ; i < num ; i++ )
                {
                    dy[getnum[i]]
= 1;
                    temp[getnum[i]]
= 1;
                }
                
for ( ; i < 2*num ; i++ )
                {
                    xy[getnum[i]]
= 1;
                    temp[getnum[i]]
= 1;
                }
                
for ( i = 1 ; i <= n ; i++ )
                {
                    
if ( !temp[i] )
                        flag[i]
= 1;
                }
            }
            
else if ( '<' == ope )
            {
                memset(temp, 
0sizeof(temp));
                
for ( i = 0 ; i < num ; i++ )
                {
                    xy[getnum[i]]
= 1;
                    temp[getnum[i]]
= 1;
                }
                
for ( ; i < 2*num ; i++ )
                {
                    dy[getnum[i]]
= 1;
                    temp[getnum[i]]
= 1;
                }
                
for ( i = 1 ; i <= n ; i++ )
                {
                    
if ( !temp[i] )
                        flag[i]
= 1;
                }
            }
        }
        
for ( int i = 1 ; i <= n ; i++ )
        {
            
if ( dy[i] && xy[i] )
                flag[i]
= 1;
        }
        printf(
"%d\n", work());
    }
    
return 0;
}

posted on 2011-10-03 20:20 purplest 阅读(287) 评论(0)  编辑 收藏 引用 所属分类: 数论


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2011年8月>
31123456
78910111213
14151617181920
21222324252627
28293031123
45678910

导航

统计

常用链接

留言簿

随笔分类(70)

随笔档案(68)

ACMer

搜索

最新随笔

最新评论