HUST——Little Sheep and a paper

来源:互联网 发布:吴昕淘宝店关了 编辑:程序博客网 时间:2024/05/21 17:34

点击打开链接

一道数学题目

题意为给出折纸的过程,问最后摊开后朝向自己突出的折痕个数。

仔细思考后发现左折和右折效果一样,同理上下折也一样。

情况分2种。

第一种:只折一次。

结果答案都是0.

第二种:折多次。

先讨论第一次是上下折。

折完第一次后继续折,设左右折n次,上下折m次。

摊开后,不难发现答案 就是第一次折的的那条中线上方所含的边数,(不包含纸的边缘和中线)

竖边数=(2^n-1)*2^m.

横边数=(2^m-1)*2^n.

答案就是(2^n-1)*2^m+(2^m-1)*2^n。

而第一次是左右折折也可得出相同的结论。

#include<iostream>#include<cstdio>using namespace std;#define mod 100000009char ch[1000009];int main(){int i,t;long long ans,z,s;scanf("%d",&t);getchar();while(t--){scanf("%s",ch); z=1;s=1;for(i=1;ch[i]!='\0';i++){if(ch[i]=='L'||ch[i]=='R'){if(z*2>=mod)z=z*2%mod;elsez=z*2;}else//(ch[i]=='U'||ch[i]=='D'){if(s*2>=mod)s=s*2%mod;elses=s*2;}}if(s==1&&z==1)printf("0\n");else{ans=((s-1)*z%mod+(z-1)*s%mod)%mod;printf("%lld\n",ans);}}return 0;}


原创粉丝点击