1 条题解
-
0
C++ :
#include <bits/stdc++.h> using namespace std; int a[20][8];//存储符合条件的牛 int r[8];//存储每头牛的编号的二进制 int k;//符合条件的牛的头数 int b;//每头牛有几只角 int d;//需要几只角不同才友好 //将编号为n的牛的编号转换为2进制 void jinzhi(int n){ int i; //清空r数组 for(i = 0;i < b;i++){ r[i] = 0; } i = 0; while(n != 0){ r[i] = n % 2; n = n / 2; i++; } } //判断编号为n的牛和前面的牛是否友好 bool you(){ bool f = true; //循环a数组的每头牛,判断r数组的这头牛和a数组的每头牛是否友好 int i,j,c; for(i = 0;i < k;i++){ c = 0;//假设r和a[i]有c只不同的角 for(j = 0;j < b;j++){ if(a[i][j] != r[j]){ c++; if(c >= d){ break; } } } //如果a[i]和r不友好 if(c < d){ f = false; break; } } return f; } int main(){ int i = 0,j; int n; cin>>n>>b>>d; k = 1; bool f; cout<<0<<" "; while(k < n){ i++;//判断下一组 jinzhi(i); f = you();//判断r和a数组的牛是否友好 if(f == true){ //将r数组的牛角存储到a数组 for(j = 0;j < b;j++){ a[k][j] = r[j]; } cout<<i<<" "; k++; } } }
Python :
def add(a,b): k=0 for i in range(len(a)): if(a[i]!=b[i]): k=k+1 return(k) sr=input().split() N=int(sr[0]) B=int(sr[1]) D=int(sr[2]) k=1 a=[] x=bin(0)[2:] x=x.zfill(B) a.append(x) print(0,end=" ") for i in range(1,2**B): x=bin(i)[2:] x=x.zfill(B) f=1 for j in range(len(a)): y=a[j] if(add(x,y)<D): f=0 break if(f==1): a.append(x) k=k+1 if(k<=N): print(i,end=" ")
- 1
信息
- ID
- 2452
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者