算法训练 审美课 用c语言,蓝桥杯算法训练审美课

#include

using namespace std;

//用位存,比较的时候直接取反看是否相等,不要异或

//这是我的做法,超时了,

//其实他用的是取反的技巧避免了第二重循环,那么就判断去饭后的结果在不在就可以了,用hash加速

// int n,m,a[50000],cache[50000];//cache 0 1

// int main(){

// cin>>n>>m;

// memset(a,0,sizeof(a));

// memset(cache,0,sizeof(cache));

// int map=(1<

// // cout<

// for(int i=0;i

// int k;

// for(int j=0;j

// cin>>k;

// a[i]=(a[i]<<1)+k;

// }

// }

// // for(int i=0;i

// // cout<

// for(int i=0;i

// int temp=0,other=0,num=0;

// //other 是累计减少

// if(cache[i]==1) continue;

// for(int j=i+1;j

// // cout<

// int r=a[i]^a[j];

// if(r==map) temp++;//注意!!!异或运算符优先级低,要打括号。

// //temp得到的是a[i+1]--a[j-1],即在相同之前的所有不同数

// else if(r==0){

// //说明a[j]和a[i]一样

// other+=temp;

// num++;

// cache[j]=1;

// }

// }

// temp=temp*(num+1)-other;

// s+=temp;

// }

// cout<

// return 0;

// }

//ans 为 对应的二进制转化后的值的个数

//把 On2 变成 On 了。。

int a[50000],ans[2000000],m,n;

int main(){

cin>>n>>m;

memset(a,0,sizeof(a));

memset(ans,0,sizeof(ans));

int map=(1<

// cout<

for(int i=0;i

int k;

for(int j=0;j

cin>>k;

a[i]=(a[i]<<1)+k;

}

ans[a[i]]++;

}

for(int i=0;i

int k=a[i]^map;//相当于取反

s+=ans[k];

// int k=(~a[i]);这么做不可以,因为取反是针对于int全位的,

// s+=ans[k];

//对 a[i] 取反后直接找对应的数目

}

//这么做可以保证 1 2、 2 1都计算,所以除2

//我的方法中不能保证

cout<

return 0;

}

标签:map,cache,int,memset,取反,审美,蓝桥,算法,sizeof

来源: https://www.cnblogs.com/MorrowWind/p/13056651.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值