USACO 2.2Preface Numbering (找规律)

Posted 水郁

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了USACO 2.2Preface Numbering (找规律)相关的知识,希望对你有一定的参考价值。

求 1~n 的所有罗马数字表达中,出现过的每个字母的个数。

分别对每个数的罗马表达式计算每个字母个数。

对于十进制的每一位,都是一样的规则,只是代表的字母不同。

于是我们从最后一位往前考虑,当前位由字母 s[i] 代表 1,字母 s[i+1] 代表 5,s[i+2] 代表 10(在下一次代表1)。

每一位考虑完 i+=2;

num[i] 为当前位为i对应的 s[i] 的个数,当前位为 4~8 时,s[i+1] 出现 1 次,当前位为 9 时,s[i+2] 出现一次。

http://train.usaco.org/usacoprob2?a=Ubydl1YBuc9&S=preface

/*
TASK: preface
LANG: C++
 */
#include<cstdio>
int n;
char s[10]="IVXLCDM";
int num[15]={0,1,2,3,1,0,1,2,3,1,0};
int ans[10];
void get(int n){
	int i=0;
	while(n){
		int t=n%10;
		n/=10;
		ans[i]+=num[t];
		if(t>=4&&t<9)ans[i+1]++;
		if(t==9)ans[i+2]++;
		i+=2;
	}
}
int main(){
	freopen("preface.in","r",stdin);
	freopen("preface.out","w",stdout);
	scanf("%d",&n);
//	get(n);
	for(int i=1;i<=n;i++)	
		get(i);
	for(int i=0;s[i];i++)if(ans[i])
		printf("%c %d\n",s[i],ans[i]);
}	

  

以上是关于USACO 2.2Preface Numbering (找规律)的主要内容,如果未能解决你的问题,请参考以下文章

洛谷 P1465 [USACO2.2]序言页码 Preface Numbering

USACO 2.2Runaround Numbers

USACO 2.2Party Lamps

USACO 2.2Subset Sums (DP)

USACO 2.2 Party Lamps 高能等效+规律枚举

USACO 2.2 Subset Sums 经典的方案DP+必要的转化