紫名了好开心>_< 这次怒涨100+
A:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
for(int i=1;i<=n/2;i++){
string s;
for(int j=1;j<=(n-(2*i-1))/2;j++)
putchar('*');
for(int j=1;j<=2*i-1;j++)
putchar('D');
for(int j=1;j<=(n-(2*i-1))/2;j++)
putchar('*');
puts("");
}
for(int i=1;i<=n;i++)putchar('D');puts("");
for(int i=n/2;i>=1;i--){
string s;
for(int j=1;j<=(n-(2*i-1))/2;j++)
putchar('*');
for(int j=1;j<=2*i-1;j++)
putchar('D');
for(int j=1;j<=(n-(2*i-1))/2;j++)
putchar('*');
puts("");
}
return 0;
}
B:
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
int n;
int a[maxn];
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",a+i);
int pos=-1,ans=0;
for(int i=1;i<n;i++){
if(a[i+1]<a[i]){pos=i;ans=n-i;break;}
}
if(pos==-1){
puts("0");
return 0;
}
if(a[n]>a[1]){
puts("-1");
return 0;
}
int ok=1;
for(int i=pos+1;i<n;i++){
if(a[i+1]<a[i])ok=0;
}
if(ok)printf("%d\n",ans);else puts("-1");
return 0;
}
C:
#include<bits/stdc++.h>
using namespace std;
int n,m;
const double eps=1e-8;
int main(){
cin>>m>>n;
double ans=0,can=1;
for(int i=m;i>=1;i--){
ans+=can*(1-pow((double)(i-1)/i,n))*i;
can=can*pow((double)(i-1)/i,n);
}printf("%lf",ans);
return 0;
}
D题状压dp
一坨数互质,也就是说他们的质因子没有重复的
f[i][S]表示1..i,已使用了S集合的质因子的最小代价
f[i][S]=f[i-1][S']+w
#include<bits/stdc++.h>
using namespace std;
int p[16]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53};
int n,m;
int a[101];
int f[101][1<<17];
int g[101][1<<17];
int nb[101][1<<17];
void out(int n,int i){
if(n==0)return;
out(n-1,g[n][i]);
printf("%d ",nb[n][i]);
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
memset(f,0x3f,sizeof(f));
f[0][0]=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=59;j++){
int w=abs(j-a[i]),num=j;
int test=0;
for(int k=0;k<16;k++)while(num%p[k]==0)num/=p[k],test|=(1<<k);
for(int k=0;k<(1<<16);k++){
if(k&test)continue;
int x=k|test;
if(f[i][x]>f[i-1][k]+w)
f[i][x]=f[i-1][k]+w,g[i][x]=k,nb[i][x]=j;
}
}
}
int minn=INT_MAX,pos=-1;
for(int i=0;i<(1<<16);i++){
if(minn>f[n][i]){
minn=f[n][i];
pos=i;
}
}
out(n,pos);
return 0;
}
E太神了不会做