Codeforces 997B Roman Digits【暴力】【枚举】

缺欠的是做题的思路,当看到这道题发现n是10^9级别,第一反应是得找到一个公式。但怎么找没想出来。

满足i+j+k+p = n (i,j,k,p分别是1,5,10,50取的个数),我们可以用n^3代价(枚举i,j,k)n比较小的时候的答案,并试着从枚举得到的答案里找到规律。

事实也确实能从中找到规律,n从12开始就是等差数列了,方差49。

这题说难不难,但当时卡了很多人。

缺少的是一种思路吧。

也确实第一道遇到的半打表ac的题

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 long long n,z,ans;
 4 long long dfs(int x)
 5 {
 6     map<long long,int>ma;
 7     ma.clear();
 8     long long num=0;
 9     for(int i=0;i<=x;i++)
10     for(int j=0;j+i<=x;j++)
11         for(int k=0;k+i+j<=x;k++)
12     {
13         z=i+j*5+k*10+(x-i-j-k)*50;
14         if(!ma[z]) {ma[z]=1;num++;}
15     }
16     return num;
17 }
18 int main()
19 {    
20     scanf("%lld",&n);
21     if(n<=20) ans=dfs(n);
22     else ans=dfs(20)+(n-20)*49;
23     printf("%lld\n",ans);
24     return 0;
25 }

代码是从这里摘的,没有自己写了

https://blog.csdn.net/qq_37868325/article/details/80879686

猜你喜欢

转载自www.cnblogs.com/ZhenghangHu/p/9255724.html
今日推荐