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

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

51Nod - 1655 找規(guī)律 + 構(gòu)造

2019-11-09 19:39:39
字體:
供稿:網(wǎng)友

題意:

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

思路:

一開始沒什么思路,找找規(guī)律,花了幾個發(fā)現(xiàn),先把正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;}


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 苍溪县| 苏州市| 林周县| 尤溪县| 乐平市| 广丰县| 辽宁省| 都匀市| 吉林市| 福州市| 呈贡县| 都江堰市| 南宫市| 长治县| 新平| 亚东县| 马鞍山市| 邢台县| 个旧市| 武穴市| 尖扎县| 青州市| 称多县| 九龙城区| 河池市| 松潘县| 泰安市| 白河县| 泰顺县| 株洲市| 盈江县| 栾城县| 阿坝| 剑阁县| 大同市| 新建县| 新余市| 竹北市| 临泽县| 潞城市| 双柏县|