Hdu-6253 2017CCPC-Final K.Knightmare 规律
2024-10-01 06:42:05
题意:给你一个无限大的棋盘,一个象棋中的马,问你这个马,飞n步后,可能的位置有多少种?
题解:看到题,就想先打表试试,于是先写个暴力(枚举每个位置,是马就飞周围8个格子,注意不要在同个循环里把格子的标记涂成相同的数字)
然后打出来是9 41 109 205 325 473 649 853
对于这种增长不快的,我一般是先直接两项相减
得到 32 68 96 120 148 176 204
这时就看到,这个数列的增长越来越有趣? 后面都加的是?
于是对于n>=5,我们有 f[n]=f[n-1]+120+(n-5)*28 = f[n-1]+28*n-20
这种递推式很明显的 解法 f[n] = f[n-1]+28*n-20
f[n-1]= f[n-2]+28*(n-1)-20
f[5]=f[4]+28*(5)-20
左右相加,再抵消.
f[n]=28*(n+n-1+...+5)-20*(n-5+1)=f[4]+28*(n+5)*(n-4)/2-20*(n-4)=(14*(n+5)-20)*(n-4)+205 = (14*n+50)*(n-4)+205
#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ll;
int main()
{
int caseCnt;
scanf("%d",&caseCnt);
for(int t=;t<=caseCnt;++t) {
ll n;
scanf("%llu",&n);
ll ans;
if(n==) ans=;
else if(n==) ans=;
else if(n==) ans=;
else if(n==) ans=;
else if(n==) ans=;
else {
ans=(*n+)*(n-)+;
}
printf("Case #%d: %llu\n",t,ans);
}
return ;
}
最新文章
- iOS获取app图标和启动图片名字(AppIcon and LaunchImage&#39;s name)
- 编程语言吉祥物之Duke
- django自带加密模块的使用
- Knockout.js随手记(6)
- 总结消息队列RabbitMQ的基本用法
- error: C++ preprocessor ";/lib/cpp"; fails sanity check
- UNIX网络编程-recv、send、read、write之间的联系与区别
- 【LeetCode 173】Binary Search Tree Iterator
- 一、python基础笔记(输入输出、list、touple、dict、set)
- 父 shell,子 shell ,export 与 变量传递
- Ollydbg 中断方法浅探
- nyoj 2 括号配对问题
- MEF高级进阶
- ELK采集之nginx 之高德地图出城市IP分布图
- Linux+.NetCore+Nginx搭建集群
- 【Vue】Vue中的父子组件通讯以及使用sync同步父子组件数据
- 【原创精品】程序员最强大的利器——电子笔记本的思考(1)(ver0.3)
- Oracle table names are case sensitive (normally all uppercase)
- .net core使用Ku.Core.Extensions.Layui实现layui表单渲染
- sql server DbHelperSQL类