P8924 Perfect Math Class 题解
感谢GMOI,让我这个蒟蒻终于有一场公开赛能够250pts+。
我在的出题组(传送门,欢迎加入)曾有一个人在数学课上出过绘制函数图像的题目,甚至也是用 * 和 .,不过不是这样的多项式函数,而是输入解析式,这里不多说了。我看到这题感到莫名亲切,于是决定赛后来提交一篇题解(虽然我认为肯定过不了)。
根据函数的定义,我们知道,对于函数定义域内的任意 *,(也可能没有,
AC代码如下:
#include<bits/stdc++.h>
using namespace std;
long long n,m,k,a[10],s[105];//s[i] 存储 x=i 时 f(x) 的值,超出值域则为 -1
long long f(long long x){//求 f(x) 的值
long long t=1,sum=0;
for(int i=0;i<=k;i++){
sum+=t*a[i];
t*=x;
}
if(sum<0||sum>=m)
return -1;//出界改为-1
return sum;
}
int main(){
scanf("%lld%lld%lld",&n,&m,&k);
for(int i=0;i<=k;i++)
scanf("%lld",&a[i]);
for(int i=0;i<n;i++)
s[i]=f(i);
for(int i=m-1;i>=0;i--){//打印图像,注意 y 轴是从大到小的
for(int j=0;j<n;j++){
if(i==s[j])
printf("*");
else
printf(".");
}
printf("\n");
}
return 0;
}
另外需要注意的是:不开 long long 见祖宗。
其实本题还有另一种做法。任意一元函数,可以看作某个二元方程的解集的映射,只要在输出每个位置时判断这个位置的
本题解作者是个大蒟蒻,才上初一,CSP-J连初赛都过不了,难免有一些错误的地方,希望看到的大佬指正。