【洛谷比赛】[LnOI2019]长脖子鹿省选模拟赛 T1 题解

  今天是[LnOI2019]长脖子鹿省选模拟赛的时间,小编表示考的不怎么样,改了半天也只会改第一题,那也先呈上题解吧。

T1:P5248 [LnOI2019SP]快速多项式变换(FPT)

  一看这题就很手软,没有告诉具体多项式到底有多少项,只好一个一个暴力枚举,但是这也不现实,于是小编就开始骗分,还一分也没骗着。赛后小编看到的题解,才明白这是一道转进制的题,将十进制转换成m进制,m^0,m^1,m^2这不刚好对应上m进制的单位吗?所得结果刚好就是问题的解。那么用短除法模拟算出m进制下f(m)的每一位,输出即可,代码如下:

 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 int m,f,a[10000],k=0;
 5 int main()
 6 {
 7     scanf("%d%d",&m,&f);
 8     //cin>>m>>f;
 9     for(int i=1;;i++)
10     {
11         a[++k]=f%m;
12         f/=m;
13         if(f==0) break;
14         
15     }
16     printf("%d \n",k);
17     //cout<<k<<endl;
18     for(int i=1;i<=k;i++)
19     printf("%d ",a[i]);
20     //cout<<a[i]<<" ";
21     return 0;
22 }

  随便一写发现wa了一大片。

  进过深思熟虑后发现忘了注意数据规模:

   10^18,int不爆才怪呢,匆匆一改就过了。

 1 // luogu-judger-enable-o2
 2 #include<iostream>
 3 #include<cstdio>
 4 using namespace std;
 5 unsigned long long m,f,a[10000],k=0;
 6 int main()
 7 {
 8     scanf("%lld%lld",&m,&f);
 9     //cin>>m>>f;
10     for(int i=1;;i++)
11     {
12         a[++k]=f%m;
13         f/=m;
14         if(f==0) break;
15         
16     }
17     printf("%lld \n",k);
18     //cout<<k<<endl;
19     for(int i=1;i<=k;i++)
20     printf("%lld ",a[i]);
21     //cout<<a[i]<<" ";
22     return 0;
23 }

  T2,T3,T4的题解小编后续也会加进来……

猜你喜欢

转载自www.cnblogs.com/TFLS-gzr/p/10507066.html
今日推荐