心如止水
Je n'ai pas le temps
posts - 400,comments - 130,trackbacks - 0

E文不够好,题目意思没有看明白。看了别人题解上讲述的题目大意加上样例分析,大致理解了。
题目意思是这样的,给出两个序列A、B,对于A[i]==B[j],如果i==j,那么这是一个strong对,否则这是一个weak对。题目要求先找出所有的strong对,然后找出weak对(一对数字只能用一次)。
这样的模拟题还是不能急,心里要对过程很明白,一步一步来,不要怕代码长。

以下是我的代码:
#include<cstdio>
#include
<cstring>
using namespace std;
const int kMaxn(1007);

int main()
{
    
/*
    freopen("data.in","r",stdin);
    freopen("data.out","w",stdout);
    //
*/

    
int T(0),n;
    
while(scanf("%d",&n)==1 && n)
    {
        
int code[kMaxn];
        
for(int i=1;i<=n;i++)
            scanf(
"%d",&code[i]);
        T
++;
        printf(
"Game %d:\n",T);
        
int guess[kMaxn];
        
for(int i=1;i<=n;i++)
            scanf(
"%d",&guess[i]);
        
while(guess[1])
        {
            
int t[kMaxn];
            memcpy(t,code,kMaxn
*sizeof(int));
            
int strong(0),weak(0);
            
for(int i=1;i<=n;i++)
                
if(t[i]==guess[i])
                {
                    strong
++;
                    t[i]
=guess[i]=0;
                }
            
for(int i=1;i<=n;i++)
            {
                
if(!t[i])
                    
continue;
                
for(int j=1;j<=n;j++)
                    
if(t[i]==guess[j])
                    {
                        weak
++;
                        t[i]
=guess[j]=0;
                        
break;
                    }
            }

            printf(
"    (%d,%d)\n",strong,weak);

            
for(int i=1;i<=n;i++)
                scanf(
"%d",&guess[i]);
        }
    }

    
return 0;
}
posted on 2011-04-09 00:35 lee1r 阅读(1095) 评论(0)  编辑 收藏 引用 所属分类: 题目分类:基础/模拟

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