博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Stanford Local Programming Contest 2011
阅读量:4700 次
发布时间:2019-06-09

本文共 1292 字,大约阅读时间需要 4 分钟。

这几天把SLPC2011的题目做一下

这里是题目连接:

A.Another Rock-Paper-Scissors Problem

题目大意;给出Sonny在每一局出石头剪刀布的规则(具体规则将不太清楚,自己看题目吧),问你在第N局出什么才能赢过Sonny?

题目分析:根据题意,我们可以发现连续的几局可分成若干块(每一块的局数显然与3的幂次有关,是个人都看得出,我就不再解释原因),每一块出什么都是由上一块决定的。这就提醒我们可以使用递归来解决这一题。设f(N)表示第N局Sunny出的东西(我们用0表示R,1表示P,2表示S),则f(N)=(f(N-delta)+1)mod 3,其中delta表示小于n的最大的3的幂次方,即delta=max{3^i|3^i<N,i∈N },这个递归的边界条件就是f(N)=N-1,  N<=3。这样在O(log3N)的时间内就解决了这一题。

View Code
#include 
typedef long long LL;LL p[30];LL n;int get(LL n){ int i,ret; LL del; if (n<=3) return n; for (i=0;i<30;i++) if (p[i]>=n) break; del=p[i-1]; ret=(get(n-del)+1)%4; if (!ret) ret++; return ret;}int main(){ int i,ans; freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); p[0]=1; for (i=1;i<30;i++) p[i]=p[i-1]*3; while (scanf("%I64d",&n)!=EOF&&n>0) { ans=(get(n)+1)%4; if (!ans) ans++; if (ans==1) printf("R\n"); else if (ans==2) printf("P\n"); else printf("S\n"); } fclose(stdin); fclose(stdout); return 0;}

B.Ball Painting

待续

C.City Driving

待续

D.Drunken Walk

待续

E.Empty Triangles

待续

F.Fighting for Triangles

待续

G.Guessing Game

待续

H.Hidden Code

待续

I.Identity Checker

待续

转载于:https://www.cnblogs.com/NeverGo/archive/2012/10/03/2711149.html

你可能感兴趣的文章
python之hasattr、getattr和setattr函数
查看>>
maven使用阿里镜像配置文件
查看>>
Copy code from eclipse to word, save syntax.
查看>>
arguments.callee的作用及替换方案
查看>>
P2709 小B的询问
查看>>
PHP echo 和 print 语句
查看>>
第一讲 一个简单的Qt程序分析
查看>>
Centos 6.5下的OPENJDK卸载和SUN的JDK安装、环境变量配置
查看>>
poj 1979 Red and Black(dfs)
查看>>
【.Net基础03】HttpWebRequest模拟浏览器登陆
查看>>
zTree async 动态参数处理
查看>>
Oracle学习之常见错误整理
查看>>
数据库插入数据乱码问题
查看>>
altium annotate 选项设置 complete existing packages
查看>>
【模式识别与机器学习】——SVM举例
查看>>
【转】IT名企面试:微软笔试题(1)
查看>>
IO流入门-第十章-DataInputStream_DataOutputStream
查看>>
DRF的分页
查看>>
Mysql 模糊匹配(字符串str中是否包含子字符串substr)
查看>>
python:open/文件操作
查看>>