ACM PKU 1147 Binary codes http://acm.pku.edu.cn/JudgeOnline/problem?id=1147

研究了n久,原来是题意理解有问题.,,
这句话很诡异 Then rows of the matrix are sorted in alphabetical order, where ‘0’ is before ‘1’'

经过研究,发现题意原来是这样的 : 1.所有行都是经过某一行的rotated versions 2.即上面这句话的理解:将所有的rotated versions 排序.... 3.由1和2,所以行的顺序和生成rotated versions 的顺序相比,是混乱的....

注意到有一点是确定的,同一行中最后一个数和第一个数的关系.

方法: 因为是经过按照row排序的,所以第一列肯定是排好序.第一列和最后一列对照,可得出以上说的"混乱"的顺序,保存在next数组里. 最后按照next数组的顺序排列input数据...

这题费了我一个半小时,网上也找不到任何代码和算法,确实是经典啊~~
destination[] 放输入数据,即最后一列
ans[]放第一列
next[]是根据这两列比较得到的顺序

#include <iostream>
using namespace std;

int destination[3001];
int next[3001];
bool flag[3001];
int ans[3001];

int main()
{
int n, i = 1,j=1;
int zero = 0 , one = 0;
cin >> n;
for ( ; i <= n; i++)
{
   cin >> destination[i];
   if(destination[i] == 0)
    zero++;
   else 
    one++;
}

memset(flag,1,sizeof(flag));

for(i = 1;i <= zero;ans[i++] = 0);
for(     ;i <= n   ;ans[i++] = 1);

for(i = 1; i <= n; i++)
{
   j = 1;
   while(ans[i] != destination[j] || flag[j] == 0 ) j++;
   next[i] = j;
   flag[j] = 0;
}

j = 1;
for( i = 1 ; i <= n; i++)
{
   j = next[j];
   cout<<destination[j]<<" ";  
}
cout<<endl;
return 0;
}
        
看了流牛师兄的分析写的,就这样好奉献了一次RE,很不应该啊!


转载于:https://www.cnblogs.com/Chinese-Coder-Clarence/articles/2039232.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值