[openjudge2987]小兔子捡金币
来源:互联网 发布:固结实验数据 编辑:程序博客网 时间:2024/04/26 23:49
题目←
头一次打那么长的代码re了一遍就过了!(哭)
唔……略微的眼熟,跟清北学堂那天的模拟有点像?
总之找规律吧……找找找找……
等等为什么代码这么长?
是不是处理了很多没用的东西?算了不管了……
#include<iostream>#include<cstdio>#include<algorithm>#define LL long longusing namespace std;const LL MAXN = 100000 + 50;struct zt{ LL l,r;}lim[MAXN];struct zt2{ LL u,d;}h[MAXN];LL n,L[MAXN],R[MAXN];LL U[MAXN],D[MAXN];LL find(LL x,LL y){ if(x <= n/2) { if(y >= lim[x].l && y <= lim[x].r) { return L[x] + (y - lim[x].l); } else if(y < lim[x].l) { return U[y] - (x - h[y].u); } else if(y > lim[x].r) { return U[y] + (x - h[y].u); } } else { if(y >= lim[x].l && y <= lim[x].r) { return L[x] - (y - lim[x].l); } else if(y < lim[x].l) { return U[y] + (h[y].u - x); } else if(y > lim[x].r) { return U[y] - (h[y].u - x); } }}LL k;int main(){ scanf("%lld%lld",&k,&n); LL tmp = 0; for(LL i = 1;i <= n/2;i ++) { lim[i].l = 1 + tmp; lim[i].r = n - tmp; tmp ++; } if(n % 2) { lim[n/2 + 1].l = n/2 + 1; lim[n/2 + 1].r = n/2 + 1; } tmp = 0; for(LL i = n;i > n - n/2;i --) { lim[i].l = 1 + tmp; lim[i].r = n - tmp; tmp ++; } tmp = n - 1; LL pre1 = 1,pre2 = n; L[1] = pre1;R[1] = pre2; LL temp = 1; U[1] = L[1] + 3 * (n - temp) + n - temp - 1; U[n] = R[1]; temp += 2; for(LL i = 2;i <= n/2;i ++) { L[i] = pre1 + 4 * tmp; R[i] = pre2 + 4 * tmp - 2; U[i] = L[i] + 3 * (n - temp) + n - temp - 1; U[n - i + 1] = R[i]; pre1 = L[i]; pre2 = R[i]; tmp -= 2; temp += 2; } if(n%2) { L[n/2 + 1] = n*n; R[n/2 + 1] = n*n; U[n/2 + 1] = n*n; D[n/2 + 1] = n*n; } pre1 = 1 + 3 * (n - 1);pre2 = 1 + 2 * (n - 1); LL tmp1 = 2; LL tmp2 = 3; L[n] = pre1;R[n] = pre2; D[n] = L[n]; for(LL i = n - 1;i > n - n/2;i --) { L[i] = pre1 + (n - tmp1) * 2 + (n - tmp2) * 2; R[i] = L[i] - (n - (n - i) * 2) + 1; D[n - i + 1] = L[i]; D[i] = R[i]; pre1 = L[i]; pre2 = R[i]; tmp1 += 2; tmp2 += 2; } tmp = 0; for(LL i = 1;i <= n/2;i ++) { h[i].u = 1 + tmp + 1; h[i].d = n - tmp; tmp ++; } if(n % 2) { h[n/2 + 1].u = n/2 + 1; h[n/2 + 1].d = n/2 + 1; } tmp = 0; for(LL i = n;i > n - n/2;i --) { h[i].u = 1 + tmp; h[i].d = n - tmp; tmp ++; } LL a,b; for(LL i = 1;i <= k;i ++) { scanf("%lld%lld",&a,&b); printf("%lld\n",find(a,b)); } return 0;}
阅读全文
0 0
- [openjudge2987]小兔子捡金币
- POJ 小兔子捡金币
- OpenJudge_P2987 小兔子捡金币
- poj 4006:小兔子捡金币
- 【OpenJudge 2987 】小兔子捡金币
- Openjudge 2987 小兔子捡金币
- 【OpenJudge 2987】小兔子捡金币
- openjudge 2787 小兔子捡金币 模拟
- OpenJudge noi 2987 小兔子捡金币(模拟)
- openjudge noi 2987 小兔子捡金币(模拟)
- 【OpenJ 2987】T3 小兔子捡金币(小金币捡兔子)
- 小兔子
- 小兔子故事集锦
- 古典小兔子问题
- 捡金币
- 捡金币
- 大兔子和小兔子
- '小兔子'的感情人生
- 关于IAR go to Definition功能不能使用的解决方法
- Lucene 7.0测试使用
- Oracle (内连接)与(外连接)区别
- vim文本对象
- 计算可能的编译结果数
- [openjudge2987]小兔子捡金币
- 顺序栈与链栈基本操作
- Oracle数据库之事务
- Scala 简介及安装配置
- 三角形外接圆圆心坐标
- Opencv学习之图像的均衡化、二值化图像
- JavaScript温故知新----splice、slice的区别
- Html学习笔记8:初识CSS
- 移动架构19_状态模式