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

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

51Nod - 1655 找規律 + 構造

2019-11-10 17:22:16
字體:
來源:轉載
供稿:網友

題意:

一個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;}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 孟州市| 宣武区| 内黄县| 天镇县| 抚宁县| 黄梅县| 九台市| 漯河市| 宽城| 盐城市| 鲁甸县| 买车| 雅江县| 玉溪市| 宜阳县| 巩义市| 苏尼特右旗| 泰来县| 南宫市| 渝中区| 左权县| 乌恰县| 舞阳县| 柳江县| 巴林右旗| 临汾市| 深水埗区| 临漳县| 陵水| 德江县| 思茅市| 漳州市| 镇安县| 突泉县| 佛坪县| 威信县| 太仆寺旗| 松潘县| 玉环县| 邵阳县| 太白县|