程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> UVa: 1595 - Symmetry

UVa: 1595 - Symmetry

編輯:C++入門知識

UVa: 1595 - Symmetry


 

題目描述:給出平面上N(N<=1000)個點。問是否可以找到一條豎線,使得所有點左右對稱,如圖所示:

\ 則左邊的圖形有對稱軸,右邊沒有。
思路:如點集存在對稱軸,則對稱軸為點集x坐標和的平均。然後用set存儲每個點(輸入點不同),遍歷每一個點,通過求得的對稱軸,計算它的對稱點,若不存在則輸出“NO”。
代碼如下:
#include 
#include 
#include 
#include 
#include
#include 
#include 

using namespace std;

#define FILE

typedef pair point;

int main(int argc, char* argv[])
{
	#ifdef FILE
		ifstream in(data.txt);
		ofstream out(output.txt);
		cin.rdbuf(in.rdbuf());
		cout.rdbuf(out.rdbuf());
	#endif
	int T;
	cin>>T;
	for(int i=0;i data;
		cin>>n;
		int sum = 0;
		for(int j=0;j>x>>y;
			sum+=x;
			data.insert(point(x*n,y));
		}
		bool flag = true;
		for(set::iterator i=data.begin();i!=data.end();i++)
		{
			point p = *i;
			if(data.find(point(2*sum-p.first,p.second))==data.end())
			{
				flag = false;
				break;
			}
		}
		if(flag==true)
		{
			cout<

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved