總之就隨便寫寫......只寫了 A B D E,F 還沒想,可能之後會補上,至於 C 我覺得好麻煩就怒跳過了XD
A :
#include<bits/stdc++.h> using namespace std; int d[20][20] ; main() { int n ; scanf("%d",&n) ; for(int i=1;i<=n;i++) d[i][1]=d[1][i]=1 ; for(int i=2;i<=n;i++) for(int j=2;j<=n;j++) d[i][j]=d[i-1][j]+d[i][j-1] ; printf("%d\n",d[n][n]) ; }
B :
#include<bits/stdc++.h> using namespace std; int a[200],b[200] ; main() { int n,k ; scanf("%d%d",&n,&k) ; int M=-1,m=101 ; for(int i=1;i<=n;i++) scanf("%d",&a[i]) , m=min(m,a[i]) , M=max(M,a[i]) ; if(M-m > k) { printf("NO\n") ; return 0 ; } printf("YES\n") ; int q=m/k , r=m-q*k ; for(int i=1;i<=k;i++) b[i]=i<=r ? q+1 : q ; for(int i=1;i<=n;i++) { int d=a[i]-m ; for(int j=1;j<=k;j++) { int tm= d>0 ? b[j]+1 : b[j] ; d-- ; while(tm--) printf("%d ",j) ; } printf("\n") ; } }
D :
#include<bits/stdc++.h> #define MAX 100000000007 #define LL long long using namespace std; LL a[200][200] ; set<LL> st ; main() { int n,m ; scanf("%d%d",&n,&m) ; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) scanf("%I64d",&a[i][j]) ; if(n==1) { printf("YES\n%I64d\n",MAX) ; printf("0\n") ; for(int i=1;i<=m;i++) printf("%I64d%c",a[1][i],i==m?'\n':' ') ; return 0 ; } if(m==1) { printf("YES\n%I64d\n",MAX) ; for(int i=1;i<=n;i++) printf("%I64d%c",a[i][1],i==n?'\n':' ') ; printf("0\n") ; return 0 ; } for(int i=1;i<=n;i++) for(int j=i+1;j<=n;j++) for(int k=1;k<=m;k++) for(int l=k+1;l<=m;l++) st.insert(a[i][k]+a[j][l]-a[i][l]-a[j][k]) ; LL now=*st.begin() ; for(auto i : st) now=__gcd(now,i) ; if(now<0) now=-now ; if(now) { for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) if(a[i][j]>=now) { printf("NO\n") ; return 0 ; } } LL ans ; if(!now) ans=MAX ; else ans=now ; printf("YES\n%I64d\n",ans) ; for(int i=1;i<=n;i++) printf("%I64d%c",a[i][1],i==n?'\n':' ') ; for(int i=1;i<=m;i++) printf("%I64d%c",((a[1][i]-a[1][1])%ans+ans)%ans,i==m?'\n':' ') ; }
E :
#include<bits/stdc++.h> #define LL long long #define DB double using namespace std; const int maxn=500000+100 ; char s[maxn] ; int n,a[maxn] ; LL sum1[maxn],sum2[maxn],sum[maxn] ; main() { scanf("%s",s+1) ; set<char> st={'A','E','I','O','U','Y'} ; n=strlen(s+1) ; for(int i=1;i<=n;i++) a[i]= st.count(s[i]) ? 1 : 0 ; sum[0]=sum1[0]=0LL ; for(int i=1;i<=n;i++) sum1[i]=sum1[i-1]+i*a[i] , sum[i]=sum[i-1]+a[i] ; sum2[n+1]=0LL ; for(int i=n;i>=1;i--) sum2[i]=sum2[i+1]+(n+1-i)*a[i] ; DB ans=0.0 ; for(int len=1;len<=n;len++) { LL add=0LL ; if(n>=2*len-1) { add+=sum1[len-1] ; add+=sum2[n-len+2] ; add+=(sum[n-len+1]-sum[len-1])*len ; } else { int t=n-len ; add+=sum1[t] ; add+=sum2[n-t+1] ; add+=(sum[n-t]-sum[t])*(n-len+1) ; } DB add2= ((DB)add)/((DB)len) ; ans+=add2 ; } printf("%.10f\n",ans) ; }
沒有留言:
張貼留言