紫书 习题 10-32 UVa 1414 ( 迷之规律)
2024-08-31 15:11:05
看了其他人博客,貌似i个盘子的方案数满足 f[i] = f[i-1] * x + y
???????
神来之笔
貌似没有找到严格的证明……
牛逼……
如果这样的话暴力求出x和y然后递推完事
#include<cstdio>
#include<stack>
#define REP(i, a, b) for(int i = (a); i < (b); i++)
using namespace std;
int s[10][2];
stack<int> st[3];
bool judge(int a, int b, int pre)
{
if(st[a].empty() || st[a].top() == pre) return false;
if(st[b].empty() || st[a].top() < st[b].top()) return true;
return false;
}
int solve(int n)
{
REP(i, 0, 3)
while(!st[i].empty())
st[i].pop();
for(int i = n; i >= 1; i--) st[0].push(i);
int ret = 0, pre = -1;
while(1)
{
if(st[1].size() == n || st[2].size() == n) return ret;
REP(i, 0, 6)
{
int a = s[i][0], b = s[i][1];
if(judge(a, b, pre))
{
pre = st[a].top();
st[b].push(pre);
st[a].pop();
ret++;
break;
}
}
}
}
int main()
{
int n, f2, f3;
int x, y;
while(~scanf("%d", &n))
{
REP(i, 0, 6)
{
char str[5];
scanf("%s", str);
s[i][0] = str[0] - 'A';
s[i][1] = str[1] - 'A';
}
f2 = solve(2); f3 = solve(3);
x = (f3 - f2) / (f2 - 1);
y = f2 - x;
long long ans = 1;
REP(i, 2, n + 1)
ans = ans * x + y;
printf("%lld\n", ans);
}
return 0;
}
最新文章
- Electron Angular 开发小记
- http 状态码含义
- python ftplib.FTP 获取当前路径下所有目录
- IL指令大全
- yii2中textarea中的默认值设置
- OB命令大全
- android百度定位
- Web 应用性能提升 10 倍的 10 个建议
- Logstash使用grok过滤nginx日志(二)
- 移动端H5开发 (滑动事件)
- 基于 Vue.js 的移动端组件库mint-ui实现无限滚动加载更多
- JQuery --- 第三期 (jQuery事件相关)
- C语言第01次作业--顺序、分支结构
- Traceur
- (转)Properties Editor为你解除通过native2ascii进行Unicode转码的烦恼
- python XML文件解析:用xml.dom.minidom来解析xml文件
- Java课程设计(2019版)
- 无法将参数 1 从“WCHAR [256]”转换为“const char *”
- Android-Java卖票案例-推荐此方式Runnable
- Solution for sending Whatsapp via sqlite ";INSERT INTO";