【叉积】【sdut 2508 图形密码】
2014-04-25 21:45
204 查看
图形密码
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^题目描述
题目链接:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2508触屏手机上的图形密码是一种简单有效的安全措施,有利于保护我们的隐私。小明新买了一台触屏手机,对手机上的图形密码很感兴趣,仔细研究了图形密码的构成,发现图形密码的构成连线方向可以分为顺时针和逆时针两类,有人喜欢顺时针滑动手指解码,有人喜欢逆时针解码,有人会交替两种方向。小明想做个调查,他需要记录解码连线的方向,打算通过编程来完成这个任务,你能帮助他吗?
#include<iostream> #include<stdio.h> using namespace std; int main() { int zong; cin>>zong; while(zong--) { int n; int flag1=-1;//保存前一个状态的标志变量 cin>>n; int x[200],y[200]; for(int i=1;i<=n;i++) { cin>>x[i]; cin>>y[i]; } for(int i=2;i<=n-1;i++) { int flag2=0; int x1=x[i-1]-x[i]; int y1=y[i-1]-y[i]; int x2=x[i+1]-x[i]; int y2=y[i+1]-y[i]; if(x1*y2-x2*y1>0) flag2=1;//顺时针旋转 else if(x1*y2-x2*y1<0) flag2=2;//逆时针旋转 else flag2=0;//平行不旋转 if(flag1==-1&&flag2!=0)//如果发生了旋转事件就以此状态初始化flag1,这条语句只执行一次 flag1=flag2; if(flag1!=-1&&flag2!=0&&flag1!=flag2)//这三个条件缺一不可 { if(flag1==1)//前一个状态是顺时针旋转 { cout<<"clockwise ("<<x[i]<<","<<y[i]<<") "; } else if(flag1==2)//前一个状态是逆时针旋转 { cout<<"counterclockwise ("<<x[i]<<","<<y[i]<<") "; } flag1=flag2;//用flag1保存改变以后的状态 } } if(flag1==1)//最后的状态是顺时针旋转 { cout<<"clockwise"<<endl; } else//最后的状态是逆时针旋转,无论flag1是-1(n==0)还是flag1==2(最后真的是逆时针旋转了)或者是flag==0(平行不旋转的情况,比如n==2,输入 1 1 1 2) cout<<"counterclockwise"<<endl; } return 0; }
View Code
相关文章推荐
- 随手笔记css篇_css在js中的调用
- kinect骨骼追踪在舞蹈表演评估中的应用
- 【算法】划分 partition
- Matlab中关于图像显示的几个命令
- C#-CheckBox-兴趣选择---ShinePans
- OpenCV 计算二维直方图
- 网站优化SEO
- POJ 3580 SuperMemo
- nyoj-836-画图
- sqlite数据库在linux下安装,配置,移植,使用,QT调用
- 编译器选择函数匹配
- android 输入法的打开和关闭
- OpneCV人脸识别:训练篇 推荐
- linux gcc
- iOS进入home键进入后台还能继续运行
- 编程资源汇总
- linux-写入溢出
- linux-写入溢出
- R学习笔记————编译器的安装
- 2014年实习生招聘之华为实习生招聘笔试题(上机完成)—2014/04/02