图形密码

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. bufferedimage 转换成 inputstream并保存文件

    BufferedImage img = removeBackgroud(file);//去除重影 //bufferedimage 转换成 inputstream ByteArrayOutputStre ...

  2. String,StringBuffer,StringBuilder区别

    String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能 ...

  3. Java BigDecimal使用

    //除法:精确到后4位BigDecimal a = new BigDecimal(1213); BigDecimal b = new BigDecimal(10302); BigDecimal rat ...

  4. 【leetcode】Search a 2D Matrix

    Search a 2D Matrix Write an efficient algorithm that searches for a value in an m x n matrix. This m ...

  5. Failed to issue method call: Unit httpd.service failed to load: No such file or directory.

    centos7修改httpd.service后运行systemctl restart httpd.service提示 Failed to issue method call: Unit httpd.s ...

  6. nginx服务器设置url的优雅链接

    对于LNMP这样架构的网站来说,一般都是基于php框架开发,php框架一般都会讲究优雅链接,比如Laravel,CodeIgniter,ThinkPHP等都是支持这种链接模式的,在服务器配置上也叫作u ...

  7. K3已被禁用的基础资料如何显示出来

    [基础资料]——[公共资料]——[物料.职员.客户==]——[查看]——[选项]——显示禁用基础资料——确定,就可以看见你所禁用过的基础资料,显示为红色字体! 同类问题example: 金蝶K3 禁用 ...

  8. Gson解析复杂的json数据

    最近在给公司做一个直播APK的项目,主要就是通过解析网络服务器上的json数据,然后将频道地址下载下来再调用Android的播放器进行播放,原先本来打算使用普通的json解析方法即JsonObject ...

  9. 【XLL API 函数】xlSet

    快速的将常数值放入到单元格区域中. 原型 Excel12(xlSet, LPXLOPER12 pxRes, 2, LPXLOPER12 pxReference,LPXLOPER pxValue); 参 ...

  10. C#封装C++DLL

    1.新建一个C#-Windows-类库(用于创建C#类库(.dll)的项目)类型的工程 2.对于普通C++函数 XXXX_API void cppFun(int i); 在cs代码中添加 [DllIm ...