我来我网
https://5come5.cn
 
您尚未 登录  注册 | 菠菜 | 软件站 | 音乐站 | 邮箱1 | 邮箱2 | 风格选择 | 更多 » 
 

本页主题: ACM题征解(活动结束) 显示签名 | 打印 | 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题

richardxx





性别: 保密 状态: 该用户目前不在线
等级: 品行端正
发贴: 193
威望: 0
浮云: 1144
在线等级:
注册时间: 2005-10-01
最后登陆: 2009-02-28

5come5帮你背单词 [ lecture /'lektə/ n. & v. 演讲,讲课 ]


ACM题征解(活动结束)

Binary codes   poj1147
Time Limit:1000MS Memory Limit:65536K
Total Submit:1695 Accepted:626

Description

Consider a binary string (b1…bN) with N binary digits. Given such a string, the matrix of Figure 1 is formed from the rotated versions of the string.

  b1   b2 … bN-1 bN

  b2   b3 … bN   b1

  …

  bN-1 bN … bN-3 bN-2

  bN   b1 … bN-2 bN-1



  Figure 1. The rotated matrix

Then rows of the matrix are sorted in alphabetical order, where ‘0’ is before ‘1’. You are to write a program which, given the last column of the sorted matrix, finds the first row of the sorted matrix.

As an example, consider the string (00110). The sorted matrix is

  0 0 0 1 1

  0 0 1 1 0

  0 1 1 0 0

  1 0 0 0 1

  1 1 0 0 0

and the corresponding last column is (1 0 0 1 0). Given this last column your program should determine the first row, which is (0 0 0 1 1).

Input

The first line contains one integer N ≤ 3000, the number of binary digits in the binary string. The second line contains N integers, the binary digits in the last column from top to bottom.

Output

The first line contains N integers: the binary digits in the first row from left to right.

Sample Input

5
1 0 0 1 0

Sample Output

0 0 0 1 1

Source
IOI 2001 (back-up task)


[ 此贴被kangtalc在2007-04-16 12:28重新编辑 ]
顶端 Posted: 2007-04-10 13:14 | [楼 主]
lyly



性别: 帅哥 状态: 该用户目前不在线
等级: 品行端正
发贴: 429
威望: 0
浮云: 1136
在线等级:
注册时间: 2005-09-19
最后登陆: 2010-09-06

5come5帮你背单词 [ sparrow /'spærəu/ n. 麻雀 ]


AC的代码哈,记得加浮云,都穷死了。
Copy code
#include <iostream>
using namespace std;
#define N 3005
int main()
{
   int num,a[N];
   int next[N];
   int b[N];
   cin>>num;
   int i;
   int cnt=0;
   for(i=0;i<num;i++)
   {cin>>a[i];
   cnt+=a[i];
   }
   for(i=0;i<num-cnt;i++)
       b[i]=0;
   for(i=num-cnt;i<num;i++)
       b[i]=1;
   int j=0;
   for(i=0;i<num;i++)
       if(a[i]==0)
           next[j++]=i;
       j=num-cnt;
       for(i=0;i<num;i++)
           if(a[i]==1)
               next[j++]=i;
           i=0;
           
           while(num--)
           { cout<<a[next[i]]<<" ";
           i=next[i];
           }
           cout<<endl;
           
           
           return 0;
}
本帖最近评分记录:
  • 浮云:10 (by kangtalc) | 理由: 不好意思,已经有人解决了,不过鉴于你的努力,还是小给你加点哈~
  • 顶端 Posted: 2007-04-15 13:02 | [1 楼]
    lyly



    性别: 帅哥 状态: 该用户目前不在线
    等级: 品行端正
    发贴: 429
    威望: 0
    浮云: 1136
    在线等级:
    注册时间: 2005-09-19
    最后登陆: 2010-09-06

    5come5帮你背单词 [ pioneer /paiə'niə/ n. 先驱,倡导者,开拓者 ]


    Quote:
    引用第25楼hygel于2007-04-15 14:29发表的:
    此处是被引用的隐藏贴

    想法太天真了哈,仔细思考下
    顶端 Posted: 2007-04-15 14:33 | [2 楼]
    我来我网·5come5 Forum » 程序员之家

    Total 0.008377(s) query 6, Time now is:03-12 14:59, Gzip enabled
    Powered by PHPWind v5.3, Localized by 5come5 Tech Team, 黔ICP备16009856号