A题:按照要求输出一个N*N的矩阵
思路:乱搞,萌神吐槽说是王敬华实验题的难度。。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
char s[105][105];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
s[i][j]='D';
}
}
for(int i=1;i<(n+1)/2;i++)
{
for(int j=1;j<=(n+1)/2-i;j++)
{
s[i][j]=s[i][n+1-j]='*';
}
}
for(int i=(n+1)/2+1;i<=n;i++)
{
for(int j=1;j<=i-(n+1)/2;j++)
{
s[i][j]=s[i][n+1-j]='*';
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cout<<s[i][j];
}
cout<<endl;
}
return 0;
}
B题:求每次将最后一个值放到最前面,看是否能够将原序列变成一个不递减的序列,如果可以求出最少次数。
思路:观察原序列,最多只能有两段递增的序列且后一段的最大值要小于等于第一段的最小值,然后记录下第二段的起始位置就好了。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
int n;
int a[100005];
int main()
{
int cnt=0;
int pos=0;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
for(int i=2;i<=n;i++)
{
if(a[i]<a[i-1])
{
if(pos==0)
{
pos=i;
}
else
{
cout<<-1<<endl;
return 0;
}
}
}
if(pos==0)
{
cout<<0<<endl;
}
else if(a[n]<=a[1])
{
cout<<n+1-pos<<endl;
}
else
{
cout<<-1<<endl;
}
return 0;
}
C题:求扔m个面的骰子n次出现的最大值的期望。
思路:可以画图YY 分母显然是m^n,然后画个3个面扔3次的表 发现出现3 19次 ,2 7次 ,1 1次 E=3*(3^3-2^3)+2*(x^3-1^3)+1*(1^3-0^3)/3^3
2*2也有类似的情况,故YY公式:E=m*(m^n-(m-1)^n)+(m-1)*((m-1)^n-(m-2)^n)+.....1*(1^n-0^n)/m^n
再对公式化简有:
m
E=m-Σ [(m-i)/m]^n
i=1
剩下的处理就是快速幂了。。。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
int m,n;
double power(double a,int b)
{
double res=1.0;
while(b)
{
if(b&1)
res*=a;
a*=a;
b>>=1;
}
return res;
}
int main()
{
cin>>m>>n;
double ans1=(double)m;
for(int i=1;i<=m;i++)
{
double t1=(double)(m-i);
double t2=m;
t1=t1/t2;
ans1-=power(t1,n);
}
printf("%.12lf\n",ans1);
return 0;
}
做的是DIV1,24分钟切了A题之后剩下就再卖萌了= = 蒟蒻只会切水题,DIV1真不是蒟蒻呆的地方,实力差距还是太大了T T,早上起来把DIV2的AB切了,写了个简要题解,凑合着看吧。。。