京东8.21笔试
#京东笔试#
一直在研究01,邻居都没做。。。
虽然凉了,但是不知道做的对不对就难受,有没有人看看这两个程序对不对
邻居:
01:
a:b=c:d 则a:b=(a+c):(b+d) 如果串a可划分为某子串b,那么所有划分位置b 2b 3b都符合01比例
#京东笔试##京东##笔试题目#
一直在研究01,邻居都没做。。。
虽然凉了,但是不知道做的对不对就难受,有没有人看看这两个程序对不对
邻居:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
int N;
cin>>N;
vector<vector<int>> a(N,vector<int>(2));
for(int i=0;i<N;i++){
cin>>a[i][0]>>a[i][1];
}
int ans=0;
vector<vector<int>> b;
for(int i=0;i<N;i++){
if(!b.size()){
b.push_back(a[i]);
}else{
for(int j=0;j<b.size();j++){
if(a[i][0]-b[j][0]==a[i][1]-b[j][1]){ //匹配已有模式
ans++;
break;
}
}
b.push_back(a[i]); //压入新模式
}
}
/*
sort(a.begin(),a.end());
for(int i=0;i<N-1;i++){
for(int j=i+1;j<N;j++){
if(a[i][0]-a[j][0]==a[i][1]-a[j][1]){
ans++;
}
}
}
*/
cout<<ans<<endl;
return 0;
}
01:
a:b=c:d 则a:b=(a+c):(b+d) 如果串a可划分为某子串b,那么所有划分位置b 2b 3b都符合01比例
#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main(){
int n;
string str;
cin>>n;
cin>>str;
vector<int>ans(n,1);
string s="";
vector<int>n0(n,0);
vector<int>n1(n,0);
if(str[0]=='0'){
n0[0]=1;
}else{
n1[0]=1;
}
int ma,mi;
for(int i=1;i<n;i++){
if(str[i]=='0'){
n0[i]=n0[i-1]+1;
n1[i]=n1[i-1];
}
if(str[i]=='1'){
n1[i]=n1[i-1]+1;
n0[i]=n0[i-1];
}
if(n0[i]>1&&n1[i]>1){
ma=n0[i]>=n1[i]?n0[i]:n1[i];
mi=n0[i]>=n1[i]?n1[i]:n0[i];
int k=0;
for(int i=mi;i>1;i--){
if(ma%i==0&&mi%i==0){
k=i; //当前位置0 1数量的最大公约数,作为划分的次数
}
}
if(k==0)
continue;
int l=(i+1)/k;
int flag=1;
for(int p=1;p<l&&i-p*l>=0;p++){
cout<<i<<" "<<i-p*l<<endl;
if(n0[i]*n1[i-p*l]!=n1[i]*n0[i-p*l]){ //匹配每次划分处的01之比
flag=0;
break;
}
}
if(flag){
ans[i]=k;
}
}
else if(n0[i]==0){
ans[i]=n1[i];
}else if(n1[i]==0){
ans[i]=n0[i];
}
}
for(int i=0;i<n-1;i++){
cout<<ans[i]<<" ";
}
cout<<ans[n-1]<<endl;
return 0;
} #京东笔试##京东##笔试题目#

