Day5 T2 数码问题
时间:2019-09-13
本文章向大家介绍Day5 T2 数码问题,主要包括Day5 T2 数码问题使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目
Alice有一个N*N的格子,把1~\(N^2\)按照从上到下从左到右的顺序填进表格中,允许在表格上进行两种操作:
(1)旋转行——这一行的数向右移动一个位置,而最后一列的数会移到第一列;
(2)旋转列——这一列的数向下移动一个位置,最后一行的数会移到第一行。
Alice想把数X移到(R,C)处可以采用以下方法:
•如果X不在C这一列,通过旋转行操作把X移到C这一列;
•如果X不在R这一行,通过旋转列操作把X移到R这一行。
下面是一个把6移到(3,4)的例子:
Alice现在想采用上述方法,依次把K个数移到各自的目标位置,编程计算每个数需要几次操作。
输入
第一行包含两个整数N(12 \(\leqslant\) 4 N \(\leqslant\) 10000)和K(1 \(\leqslant\) K \(\leqslant\) 1000)。
接下来K行,每行包含三个整数X(1 \(\leqslant\) X \(\leqslant N^2\))、R和C(1 \(\leqslant\) R,C \(\leqslant\) N),描述需要移动的数以及目标位置。
Alice必须按照输入顺序依次移动。
输出
输出K行,每行输出一个整数,表示操作次数。
样例
输入 | 输出 |
---|---|
4 1 6 3 4 |
3 |
4 2 6 3 4 6 2 2 |
3 5 |
5 3 1 2 2 2 2 2 12 5 5 |
2 5 3 |
题解
我们无需去记录下整个表,只需要在每次旋转行、旋转列时将后续询问中在同一行的数一同修改即可。
敲黑板:千万注意取模的使用,要特判当其大于n时取模,而非直接在其后加上取模,因为这样当其为n时,取模后就会变成0。
#include<bits/stdc++.h>
using namespace std;
int n,k;
struct node{
int x,y,num,goalx,goaly,ans;
};
node a[1010];
int main(){
scanf("%d %d",&n,&k);
for(int i=1;i<=k;i++){
scanf("%d %d %d",&a[i].num,&a[i].goalx,&a[i].goaly);
a[i].x=(a[i].num-1)/n+1,a[i].y=(a[i].num-1)%n+1;
}
for(int i=1;i<=k;i++){
a[i].ans=0;
int tx=(a[i].goalx-a[i].x+n)%n;
int ty=(a[i].goaly-a[i].y+n)%n;
a[i].y+=ty;
if(a[i].y>n) a[i].y%=n;
a[i].ans+=ty;
for(int j=i+1;j<=k;j++){
if(a[i].x==a[j].x) a[j].y+=ty;
if(a[j].y>n) a[j].y%=n;
}
a[i].x+=tx;
if(a[i].x>n) a[i].x%=n;
a[i].ans+=tx;
for(int j=i+1;j<=k;j++){
if(a[i].y==a[j].y) a[j].x+=tx;
if(a[j].x>n) a[j].x%=n;
}
printf("%d\n",a[i].ans);
}
return 0;
}
原文地址:https://www.cnblogs.com/znk161223/p/11516687.html
- Linq中连接主要有组连接、内连接、左外连接、交叉连接四种
- 深入源码理解YYCache 、SDWebImage、AFNetworking、NSCache 缓存方式与对比
- Linq Like的操作
- iOS网络——AFNetworking AFURLSessionManager源码解析
- 1692: [Usaco2007 Dec]队列变换(BZOJ1640强化版)
- 1620: [Usaco2008 Nov]Time Management 时间管理
- 手把手教你树莓派linux内核如何编译
- js处理异常try{}catch(e){}
- 1634: [Usaco2007 Jan]Protecting the Flowers 护花
- C#用链式方法表达循环嵌套1
- C#用链式方法表达循环嵌套2
- 【开源】1句代码搞定图片批量上传,无需什么代码功底【无语言界限】
- C#异步调用的方法
- 【David Silver 深度强化学习教程代码实战07】 DQN的实现
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 栅格化系统的原理以及实现
- vue-qr二维码插件使用简介
- Codeforces Round #547 (Div. 3)F1. Same Sum Blocks (Easy)
- 手机软键盘弹起导致页面变形的一种解决方案
- Codeforces Round #547 (Div. 3)F2. Same Sum Blocks (Hard)
- 《 动态规划_ 入门_最大连续子序列 》
- docker搭建elasticsearch集群
- 用canvas实现手写签名功能
- Codeforces Round #547 (Div. 3)G. Privatization of Roads in Treeland
- 《 动态规划_ 入门_最大连续子序列_HDU_1003 》
- 2015 09CCF计算机软件能力认证试题第三题
- 《内蒙古自治区第十二届大学生程序设计竞赛试题_D: 正品的概率》
- Elasticsearch: Painless script编程
- mysql实现定时全量备份
- 在浏览器调起本地应用的方法