国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

51Nod - 1655 找規律 + 構造

2019-11-09 19:34:01
字體:
來源:轉載
供稿:網友

題意:

一個n(3<=n<=100)個點的完全圖,現在給出n,要求將每條邊都染上一種顏色k(1<=k<=n),最終使得所有三個點構成的環(C(n,3)個不同的換)上三條邊的顏色和在所有顏色中任選三種顏色的組合(C(n,3)種方案)一一對應,由你來給出染色方案。本題有多組數據Input
第一行一個整數T,表示數據組數接下來T行每行一個整數n,表示完全圖的點數Output
輸出由T個部分組成每個部分的第一行一個整數n,表示完全圖的點數第二行表示構造結果如果無解輸出No solution否則輸出n*(n-1)/2條邊的起點、終點和顏色Input示例
243Output示例
4No solution31 2 3 2 3 1 3 1 2

思路:

一開始沒什么思路,找找規律,花了幾個發現,先把正n邊形外圍順時針從1到n標記一圈,然后所有外圍的邊所正對的平行邊都標記成與其一樣的顏色,畫個圖就明白了。代碼寫得比較蠢,想到就寫了。

代碼:

#include <cstdio>#include <cstring>#include <algorithm>#include <vector>using namespace std;const int MAXN = 105;int g[MAXN][MAXN];bool vis[MAXN];struct Edge {	int u, v, col;};int main() {	int T;	scanf("%d", &T);	while (T--) {		int n;		scanf("%d", &n);		PRintf("%d/n", n);		if (n % 2 == 0) {			puts("No solution");			continue;		}		for (int i = 1; i <= n; i++) {			int x = i, y = (i == n ? 1 : i + 1);			for (int j = 1; j <= n; j++) vis[j] = false;			vis[x] = vis[y] = true; 			g[x][y] = g[y][x] = i; 			for (int j = 1; j < (n - 1) / 2; j++) {				int px = (x == n ? 1 : x + 1), qx = (x == 1 ? n : x - 1);				x = vis[px] ? qx : px;				int py = (y == n ? 1 : y + 1), qy = (y == 1 ? n : y - 1);				y = vis[py] ? qy : py;				vis[x] = vis[y] = true;				g[x][y] = g[y][x] = i;			}		}		vector <Edge> ans;		for (int i = 1; i <= n; i++) {			for (int j = i + 1; j <= n; j++) {				ans.push_back((Edge){i, j, g[i][j]});			}		}		int cnt = ans.size();		for (int i = 0; i < cnt; i++)			printf("%d %d %d%c", ans[i].u, ans[i].v, ans[i].col, i == cnt - 1 ? '/n' : ' ');	}	return 0;}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 仁化县| 沙坪坝区| 贡觉县| 定襄县| 清水河县| 太康县| 商洛市| 罗山县| 博爱县| 高密市| 濮阳市| 桃园县| 贡嘎县| 故城县| 武冈市| 达拉特旗| 准格尔旗| 瑞昌市| 凌云县| 多伦县| 乐昌市| 湘潭市| 新沂市| 慈溪市| 宁波市| 新营市| 荥经县| 华阴市| 夹江县| 忻城县| 天镇县| 大化| 东海县| 昆明市| 旌德县| 巴青县| 新源县| 河东区| 绥中县| 肇州县| 辽源市|