CCF模拟题——有趣的数(自己的见解)

来源:互联网 发布:网络布线 价格 编辑:程序博客网 时间:2024/06/05 10:27

问题描述

我们把一个数称为有趣的,当且仅当:
1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次。
2. 所有的0都出现在所有的1之前,而所有的2都出现在所有的3之前。
3. 最高位数字不为0。
因此,符合我们定义的最小的有趣的数是2013。除此以外,4位的有趣的数还有两个:2031和2301。
请计算恰好有n位的有趣的数的个数。由于答案可能非常大,只需要输出答案除以1000000007的余数。

输入格式

输入只有一行,包括恰好一个正整数n (4 ≤ n ≤ 1000)。 

输出格式

输出只有一行,包括恰好n 位的整数中有趣的数的个数除以1000000007的余数。 

样例输入

4

样例输出


3

#include<iostream>#include<cstdio>using namespace std;struct student{int A;int L;}student;int size[2]={0};struct student player[2][8];void position(int who,int lo,int ac,int li){if(lo>0){size[who]++;for(int i=size[who];i>lo;i--){player[who][i]=player[who][i-1];}player[who][lo].A=ac;player[who][lo].L=li;}}void remove(int who,int lo){if(lo>0){for(int i=lo;i<size[who];i++){player[who][i]=player[who][i+1];}size[who]--;}}void attack(int who,int ac,int li){player[1-who][ac].L-=player[who][li].A;player[who][li].L-=player[1-who][ac].A;if(player[1-who][ac].L<=0)remove(1-who,ac);if(player[who][li].L<=0)remove(who,li);}int main(){player[0][0].L=player[1][0].L=30;player[0][0].A=player[1][0].A=0;int N,lo,ac,li;int who=0;cin>>N;char str[15];while(N--){cin>>str;switch(str[0]){case 's':cin>>lo>>ac>>li;position(who,lo,ac,li);break;case 'a':cin>>ac>>li;attack(who,ac,li);break;case 'e':who=1-who;break;}}for(int i=0;i<2;i++){cout<<player[i][0].L<<endl;cout<<size[i]<<" ";for(int j=1;j<=size[i];j++){cout<<player[i][j].L<<" ";}cout<<endl;}return 0;}


0 0
原创粉丝点击