【叉积】【sdut 2508 图形密码】
图形密码
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
题目链接:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2508

输入
输出
示例输入
3
5
1 1 2 1 3 1 3 2 3 3
8
1 1 1 2 1 3 2 3 3 3 3 2 3 1 2 1
7
1 1 1 2 1 3 2 2 3 1 3 2 3 3
示例输出
counterclockwise
clockwise
clockwise (3,1) counterclockwise
提示
来源
示例程序
解题思路:
用叉积判断当前的旋转方向,我用flag1保存前一个状态,用flag2表示当前的状态,那么当flag1!=flag2的时候,表明现在的方向发生了改变(flag1!=-1&&flag2!=0,原因是flag1=-1表示是初始状态,这时候flag2是什么状态都不影响;如果flag2=0,那么表示当前无变化,flag1是什么状态都不影响),用1表示顺时针旋转的状态,用2表示逆时针旋转状态,用0表示无变化,特别的,初始化flag1=-1不代表任何状态(初始状态,可以认为是顺时针也可以是逆时针,当输入一组数据的时候结果无论是顺时针还是逆时针都算对,因为只有一组数据是无法判断是顺时针还是逆时针的),注意叉积的计算公式和谁在前谁在后,这是影响题目结果的核心问题。
叉积详解:http://blog.csdn.net/william001zs/article/details/6213485
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
int zong;
cin>>zong;
while(zong--)
{
int n;
int flag1=-;//保存前一个状态的标志变量
cin>>n;
int x[],y[];
for(int i=;i<=n;i++)
{
cin>>x[i];
cin>>y[i];
}
for(int i=;i<=n-;i++)
{
int flag2=;
int x1=x[i-]-x[i];
int y1=y[i-]-y[i];
int x2=x[i+]-x[i];
int y2=y[i+]-y[i];
if(x1*y2-x2*y1>)
flag2=;//顺时针旋转
else if(x1*y2-x2*y1<)
flag2=;//逆时针旋转
else
flag2=;//平行不旋转
if(flag1==-&&flag2!=)//如果发生了旋转事件就以此状态初始化flag1,这条语句只执行一次
flag1=flag2;
if(flag1!=-&&flag2!=&&flag1!=flag2)//这三个条件缺一不可
{
if(flag1==)//前一个状态是顺时针旋转
{
cout<<"clockwise ("<<x[i]<<","<<y[i]<<") ";
}
else if(flag1==)//前一个状态是逆时针旋转
{
cout<<"counterclockwise ("<<x[i]<<","<<y[i]<<") ";
}
flag1=flag2;//用flag1保存改变以后的状态
}
}
if(flag1==)//最后的状态是顺时针旋转
{
cout<<"clockwise"<<endl;
}
else//最后的状态是逆时针旋转,无论flag1是-1(n==0)还是flag1==2(最后真的是逆时针旋转了)或者是flag==0(平行不旋转的情况,比如n==2,输入 1 1 1 2)
cout<<"counterclockwise"<<endl;
}
return ;
}
【叉积】【sdut 2508 图形密码】的更多相关文章
- python2.7写的图形密码生成器
#coding:utf8import random,wxdef password(event): a = [chr(i) for i in range(97,123)] b = [chr(i) for ...
- CTF中的一些图形密码
1.传统猪圈密码 猪圈密码又称为亦称朱高密码.共济会暗号.共济会密码或共济会员密码:是一种以特定符号来替换字母的加密方式 在线解密网址:http://moersima.00cha.net/zhuqua ...
- 破解android手机图形锁
安卓手机的图形锁包括3*3,4*4,5*5的点阵,按次序连接数个点从而达到锁定/解锁的功能.以3*3为例,最少需要连接4个点,最多能连接9个点.在我们进行绘制图形的过程中,每选中这9个点中的一个点,实 ...
- Android手势密码实现
图 二.实现思路: 1. 正上方的提示区域,用一个类(LockIndicator.java)来实现,自定义view来绘制9个提示图标: 2. 手势密码绘制区域,用一个类(GestureContentV ...
- iPhone手机安全指南
摘要:iPhone手机安全指南 - 1.iPhone解锁使用指纹:2.启用“查找我的iPhone”功能:3.Apple ID启用两步验证:4.修改SIM卡PIN码.5.iPhone被盗或丢失后,登录i ...
- Linux运维初级教程(一)Shell脚本
序,掌握shell脚本是linux运维工程师的最基础技能. 一.脚本语言 与高级语言不通,脚本语言运行时需要调用相应的解释器来翻译脚本中的内容. 常见的脚本语言有Shell脚本.Python脚本.ph ...
- fiddler抓手机报文的配置指南
前言 1.fiddler大名鼎鼎的抓包工具,而且支持重发,自动解码报文之类. 2.做爬虫时经常遇到需要抓移动端(手机/pad等)报文的情况. 网上各种资料比较,下面这篇是最准确的,转载自csdn:ht ...
- jquery中$.each()的用法
each()函数是基本上所有的框架都提供了的一个工具类函数,通过它,你可以遍历对象.数组的属性值并进行处理.jQuery和jQuery对象都实 现了该方法,对于jQuery对象,只是把each方法简单 ...
- Google Nexus 5x Android 7.0 Root
很久没有写东西了,准备重新养成这个好习惯.因为自己一直在用Nexus,前段时间自己的Nexus5老的不行了,所以买了台5x,一直没时间root,今天有时间终于有时间弄一下. 在这里整理分享一下. 开始 ...
随机推荐
- winkawaks模拟器
Winkawaks (温科沃克斯)win+ka(日文)+wa(也是日文)+k+s 最好的街机模拟器之一,与Nebula和MAME齐名,支持的游戏的有CAPCOM公司的CPS1,CPS2所有游戏,如三国 ...
- Java实现读取文件夹下(包括子目录)所有文件的文件名
在编程的过程中,经常会用到对文件的读写操作等.比如,找出某一个文件夹下的所有文件名等. 下面的程序给出了,获取某一给定文件夹下所有文件的绝对路径的程序.可以作为某一个模块,在需要的时候直接使用. pa ...
- mysql远程登录权限修改ubuntu
mysql默认只允许在localhost主机登录,如果想要通过远程登录管理,需要修改相应的权限. 方法一 首先:开启mysql所在主机的3306端口,或者关闭防火墙. service iptables ...
- hadoop小试
standard mode(标准模式) 下载 wget http://mirror.bit.edu.cn/apache/hadoop/common/stable/hadoop-2.7.2.tar.gz ...
- do{...}while(0)的意义和用法
linux内核和其他一些开源的代码中,经常会遇到这样的代码: do{ ... }) 这样的代码一看就不是一个循环,do..while表面上在这里一点意义都没有,那么为什么要这么用呢? 实际上,do{. ...
- 请不要用SECONDS_BEHIND_MASTER来衡量MYSQL主备的延迟时间【转】
本文来自:http://www.woqutech.com/?p=1116 MySQL 本身通过 show slave status 提供了 Seconds_Behind_Master ,用于衡量主备之 ...
- web.config中配置页面出错后跳转指定错误页面
每当用户访问错误页面时,会出现不友好的404错误,所以为了防止这种不友好,我们在web.config中的<system.web>节点下配置 <customErrors>,在出现 ...
- Effective C++ -----条款09:绝不在构造和析构过程中调用virtual函数
在构造和析构期间不要调用virtual函数,因为这类调用从不下降至derived class(比起当前执行构造函数和析构函数的那层).
- vs2013显示行号
随便打开一个项目,可以看到代码框内并没有显示行号 选择“工具”-“选项”,打开后界面如下 选择文本编辑器,找到下图中的“行号”并勾选 行号可以显示了 5 这样我们就完成了任务
- JqueryUI学习笔记-自动完成autocomplete
<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Inse ...