设为首页 加入收藏

TOP

ACM-ICPC 2014北京邀请赛 H Happy Reverse [模拟]
2015-07-24 05:49:42 来源: 作者: 【 】 浏览:3
Tags:ACM-ICPC 2014 北京 邀请赛 Happy Reverse 模拟

题意:给出n个二进制串,可以把其中的一些0和1反转(即0变1,1变0),找出转化后n个串中的最大值和最小值的差值。


分析:思路就是把所有的串和反转的存在一个数组中,然后排序,找最大值和最小值的差,(如果是同一个串反转的就找第二大的和最小的或第二小和最大的中的最大值)。注意假如只有一个串的话结果为0


DEBUG:

这题写了好久

1.第一次用vim,很爽,但是还没熟练

2.忽视了这题的范围,显然要用longlong

3.用了longlong后还WA,用脚本跑出来数据发现在longlong下,min的值要变成(1<<63)-1但是不能这么写,应该写个longlong 是1<<30,然后在这个longlong基础上再移位


最后不得不说句 BNUOJ真的比POJ好看很多哈

    #include 
  
   
    #include 
   
     #include 
    
      #include 
     
       using namespace std; char str[111111][222]; long long tmp=1<<30; const long long MAX_LONG=(tmp<<33)-1; long long num[111111]; long long m,n; void getRev(char* to,char* source,long long len) { for(long long i=0;i
      
       >test; for(long long time=1;time<=test;time++) { cin>>m>>n; for(long long i=1;i<=m;i++) cin>>str[i]; /*if(m==1) { printf("Case #%d: 0\n",time); continue; }*/ for(long long i=m+1;i<=2*m;i++) getRev(str[i],str[i-m],n); long long minn=MAX_LONG;long long maxn=0; for(long long i=1;i<=2*m;i++) num[i]=getNum(str[i],n); long long max1=0,max1index,min1=MAX_LONG,min1index; long long max2=0,max2index,min2=MAX_LONG,min2index; for(long long i=1;i<=2*m;i++) { if(num[i]>max1) { max1=num[i]; max1index=i; } if(num[i]
       
        max2) { max2=num[i]; max2index=i; } if(i!=min1index&&num[i]
        
         max2-min1) { //cout<<"1"<
         
          

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇UVA 10318 - Security Panel dfs .. 下一篇Codeforces 19D Points 线段树+set

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: