第一题100分
第二题100分
第四题洛谷测出来15分
希望比赛数据水一点
能得一等奖吗?求大佬解答
附程序
#include<bits/stdc++.h>
using namespace std;
int a[10000005];
int s,i;
int work(int x){
i=0;
while(1){
s=2;
i++;
while(s*2<=x){
s=s*2;
}
if(s==a[i-1]) return 0;
a[i]=s;
if(s==x) return 1;
x=x-s;
}
}
int main(){
int n,j;
cin>>n;
if(n%2==1) cout<<"-1"<<endl;
else{
if(work(n)==1)
{
for(j=1;j<=i;j++)
cout<<a[j]<<" ";
cout<<endl;
}
if(work(n)==0) cout<<"-1"<<endl;
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int a[100005],s[605];
int main(){
int n,i,j,sum,m,sum1=0;
cin>>n>>m;
for(i=1;i<=n;i++)
cin>>a[i];
for(i=1;i<=n;i++)
{
s[a[i]]++;
sum=max(1,i*m/100);
j=601;
sum1=0;
while(sum1<sum&&j>0){
j--;
sum1+=s[j];
}
cout<<j<<" ";
}
cout<<endl;
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int f[1010][1010];
int map1[1010][1010];
int z,h;
long long maxn=-100000000;
int go[3][2];
void work(int x,int y,long long ans)
{
if(x==z&&y==h)
{
maxn=max(maxn,ans);
return;
}
for(int i=0;i<=2;i++)
{
if(x+go[i][0]<=z&&x+go[i][0]>=1&&y+go[i][1]<=h&&y+go[i][1]>=1&&map1[x+go[i][0]][y+go[i][1]]==0)
{
map1[x+go[i][0]][y+go[i][1]]=1;
work(x+go[i][0],y+go[i][1],ans+f[x+go[i][0]][y+go[i][1]]);
map1[x+go[i][0]][y+go[i][1]]=0;
}
}
return;
}
int main(){
go[0][0]=1;go[0][1]=0;
go[1][0]=-1;go[1][1]=0;
go[2][0]=0;go[2][1]=1;
cin>>z>>h;
for(int i=1;i<=z;i++)
for(int j=1;j<=h;j++)
cin>>f[i][j];
work(1,1,f[1][1]);
cout<<maxn<<endl;
return 0;
}