一個 div 2 限定的比賽,說規則是仿ACM的,所以可以直接看到自己這題對不對,沒有hack。
總之就隨便寫寫......只寫了 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) ;
}