紫名了好开心>_< 这次怒涨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; }
#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; }