图形密码

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

题目链接:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2508

触屏手机上的图形密码是一种简单有效的安全措施,有利于保护我们的隐私。小明新买了一台触屏手机,对手机上的图形密码很感兴趣,仔细研究了图形密码的构成,发现图形密码的构成连线方向可以分为顺时针和逆时针两类,有人喜欢顺时针滑动手指解码,有人喜欢逆时针解码,有人会交替两种方向。小明想做个调查,他需要记录解码连线的方向,打算通过编程来完成这个任务,你能帮助他吗? 

输入

第一行输入一个数T代表测试数据个数(T<=500)。每个测试样例第一行有一个n代表有序点对个数。接下来1行n对x,y,分别代表一个点对。(1<=x,y<=6  1<=n<=100)
 

输出

连线的方向为顺时针(clockwise),还是逆时针(counterclockwise),如果方向发生变化,则输出变化前的方向,变化点的坐标和变化后的方向。比如上图所示的密码锁的解码方向为:clockwise (2,2)  counterclockwise 使用空格分开,不同的项。每行输出一个结果。
 

示例输入

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 图形密码】的更多相关文章

  1. python2.7写的图形密码生成器

    #coding:utf8import random,wxdef password(event): a = [chr(i) for i in range(97,123)] b = [chr(i) for ...

  2. CTF中的一些图形密码

    1.传统猪圈密码 猪圈密码又称为亦称朱高密码.共济会暗号.共济会密码或共济会员密码:是一种以特定符号来替换字母的加密方式 在线解密网址:http://moersima.00cha.net/zhuqua ...

  3. 破解android手机图形锁

    安卓手机的图形锁包括3*3,4*4,5*5的点阵,按次序连接数个点从而达到锁定/解锁的功能.以3*3为例,最少需要连接4个点,最多能连接9个点.在我们进行绘制图形的过程中,每选中这9个点中的一个点,实 ...

  4. Android手势密码实现

    图 二.实现思路: 1. 正上方的提示区域,用一个类(LockIndicator.java)来实现,自定义view来绘制9个提示图标: 2. 手势密码绘制区域,用一个类(GestureContentV ...

  5. iPhone手机安全指南

    摘要:iPhone手机安全指南 - 1.iPhone解锁使用指纹:2.启用“查找我的iPhone”功能:3.Apple ID启用两步验证:4.修改SIM卡PIN码.5.iPhone被盗或丢失后,登录i ...

  6. Linux运维初级教程(一)Shell脚本

    序,掌握shell脚本是linux运维工程师的最基础技能. 一.脚本语言 与高级语言不通,脚本语言运行时需要调用相应的解释器来翻译脚本中的内容. 常见的脚本语言有Shell脚本.Python脚本.ph ...

  7. fiddler抓手机报文的配置指南

    前言 1.fiddler大名鼎鼎的抓包工具,而且支持重发,自动解码报文之类. 2.做爬虫时经常遇到需要抓移动端(手机/pad等)报文的情况. 网上各种资料比较,下面这篇是最准确的,转载自csdn:ht ...

  8. jquery中$.each()的用法

    each()函数是基本上所有的框架都提供了的一个工具类函数,通过它,你可以遍历对象.数组的属性值并进行处理.jQuery和jQuery对象都实 现了该方法,对于jQuery对象,只是把each方法简单 ...

  9. Google Nexus 5x Android 7.0 Root

    很久没有写东西了,准备重新养成这个好习惯.因为自己一直在用Nexus,前段时间自己的Nexus5老的不行了,所以买了台5x,一直没时间root,今天有时间终于有时间弄一下. 在这里整理分享一下. 开始 ...

随机推荐

  1. #Deep Learning回顾#之基于深度学习的目标检测(阅读小结)

    原文链接:https://www.52ml.net/20287.html 这篇博文主要讲了深度学习在目标检测中的发展. 博文首先介绍了传统的目标检测算法过程: 传统的目标检测一般使用滑动窗口的框架,主 ...

  2. OpenCV中对图像进行二值化的关键函数——cvThreshold()。

    函数功能:采用Canny方法对图像进行边缘检测 函数原型: void cvThreshold( const CvArr* src, CvArr* dst, double threshold, doub ...

  3. log4j 配置

    给java项目添加log4j日志: 1.下载log4j jar包,放入lib目录, 导入项目中 2.创建log4j.properties 文件  目录 Src 3.在需要使用输出的类中使用 priva ...

  4. SQL 数据库初学笔记一

    做web刚好用得上SQL和php,图书馆借来书,来一个一晚上速成 <SQL必知必会>笔记 通用的语法,相关分类执行程序(DBMS): Apache Open Office Base Ado ...

  5. zipimport.ZipImportError: can't decompress data; zlib not available 解决办法

    第一步,下载python-pip的tar包 # wget https://pypi.python.org/packages/source/p/pip/pip-1.3.1.tar.gz --no-che ...

  6. phpstorm配置代码自动同步到服务器

    首先找到你的菜单栏找到Tools 然后点击配置 填写你的服务器信息 填写好项目目录 选择自动上传

  7. 【Docker】docker /var/lib/docker/aufs/mnt 目录满了,全是垃圾数据,咋搞?

    命令: #!/bin/bash # 推荐方式 docker volume ls -f dangling=true | awk '{ print $2 }' | xargs docker volume ...

  8. Flatten 2D Vector

    Implement an iterator to flatten a 2d vector. For example, Given 2d vector = [ [1,2], [3], [4,5,6] ] ...

  9. leetcode Add and Search Word - Data structure design

    我要在这里装个逼啦 class WordDictionary(object): def __init__(self): """ initialize your data ...

  10. ios 利用size classes 使 iPad  水平和垂直方向布局不同

    我们知道ipad全屏幕显示时,无论水平放置还是竖直放置,width 和 height 都是 regular,不像iphone能够区别,那么就不能使用size class 布局不同的水平和垂直界面了吗? ...