C+++题
结绳
#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
float a[10001];
int n;
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
sort(a+0,a+n);
float sum=a[0];
for(int i=1;i<n;i++){
sum=(sum+a[i])/2.0;
}
cout<<(int)sum;
return 0;
}
void f(int k){
}
A和B
#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
struct node{
int v;
int s;
};
node que[200020];
bool c[200020];
int a,b,x;
int n,t;
void f(int);
int main(){
cin>>t;
while(t--){
cin>>a>>b>>x;
f(a);
}
return 0;
}
void f(int n){
for(int i=0;i<200020;i++) c[i]=0;
int head=0;
int tail=0;
c[n+100000]=1;
que[++tail]=node{n,0};
while(head<tail){
node h=que[++head];
if(h.v==b){
cout<<h.s<<endl;
break;
}
if(h.v+1>=-100000&&h.v+1<=100000&&c[h.v+1+100000]==0){
que[++tail]=node{h.v+1,h.s+1};
c[h.v+1+100000]=1;
}
if(h.v-1>=-100000&&h.v-1<=100000&&c[h.v-1+100000]==0){
que[++tail]=node{h.v-1,h.s+1};
c[h.v-1+100000]=1;
}
if(h.v*x>=-100000&&h.v*x<=100000&&c[h.v*x+100000]==0){
que[++tail]=node{h.v*x,h.s+1};
c[h.v*x+100000]=1;
}
}
}
乘积的最大值
#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
int a[10010];
bool ca[10010];
int b[10010];
bool cb[10010];
int la,lb;
int ma=-1;
void f(int);
int main(){
cin>>la;
for(int i=0;i<la;i++){
cin>>a[i];
}
cin>>lb;
for(int i=0;i<lb;i++){
cin>>a[i];
}
f(0);
return 0;
}
void f(int sum){
ma=max(ma,sum);
for(int i=0;i<la;i++){
for(int j=0;j<lb;j++){
if(ca[i]==0&&cb[j]==0){
ca[i]=1;
cb[j]=1;
f(sum+a[i]*b[j]);
ca[i]=0;
cb[j]=0;
}
}
}
return;
}
收费站在哪里
#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
int n,m;
int a[10010];
int b[10010];
int ma=-1;
long long l[10000];
void f(int);
int main(){
cin>>n;
for(int i=1;i<=n;i++){
if(i*(i-1)/2==n){
m=i;
break;
}
}
for(int i=1;i<=n;i++){
cin>>a[i];
ma=max(ma,a[i]);
}
b[0]=0;
sort(a+0,a+n);
b[m]=a[n];
f(0);
return 0;
}
void f(int x){
if(x==n-1){
int in[1010];
int lin=0;
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
in[lin]=b[j]-b[i];
lin++;
}
}
sort(in+0,in+lin);
bool bo=false;
for(int i=1;i<=n;i++){
if(a[i]!=in[i]){
bo=true;
break;
}
}
if(bo==false){
for(int i=1;i<=n-1;i++){
cout<<b[i]<<" ";
}
cout<<b[n];
return;
}
return;
}
for(int i=1;i<=n;i++){
int in=b[x-1]+a[i];
if(l[in]==0){
b[x]=in;
l[in]=1;
f(x-1);
l[in]=0;
}
}
}