Codeforces 997B Roman Digits暴力枚举

Posted zhenghanghu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
",ans);
24     return 0;
25 }

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

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

以上是关于Codeforces 997B Roman Digits暴力枚举的主要内容,如果未能解决你的问题,请参考以下文章

codeforces401D Roman and Numbers(数位状压dp)

cf997B

(组合数学)不定方程的解+猜测——cf997B

A.Roman and Browser

Integer to Roman/Roman to Integer

装了个DNS,dig命令怎么用