`
zqynux
  • 浏览: 36802 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

USACO 2.3 Controlling Companies 控制公司

J# 
阅读更多
Controlling Companies

Some companies are partial owners of other companies because they have acquired part of their total shares of stock. For example, Ford owns 12% of Mazda. It is said that a company A controls company B if at least one of the following conditions is satisfied:

Company A = Company B
Company A owns more than 50% of Company B
Company A controls K (K >= 1) companies denoted C1, ..., CK with each company Ci owning xi% of company B and x1 + .... + xK > 50%.
Given a list of triples (i,j,p) which denote company i owning p% of company j, calculate all the pairs (h,s) in which company h controls company s. There are at most 100 companies.

Write a program to read the list of triples (i,j,p) where i, j and p are positive integers all in the range (1..100) and find all the pairs (h,s) so that company h controls company s.

PROGRAM NAME: concom
INPUT FORMAT
Line 1:  n, the number of input triples to follow
Line 2..n+1:  Three integers per line as a triple (i,j,p) described above. 

SAMPLE INPUT (file concom.in)
3
1 2 80
2 3 80
3 1 20

OUTPUT FORMAT
List 0 or more companies that control other companies. Each line contains two integers that denote that the company whose number is the first integer controls the company whose number is the second integer. Order the lines in ascending order of the first integer (and ascending order of the second integer to break ties). Do not print that a company controls itself.
SAMPLE OUTPUT (file concom.out)
1 2
1 3
2 3


题目
有些公司是其他公司的部分拥有者,因为他们获得了其他公司发行的股票的一部分。例如,福特公司拥有马自达公司12%的股票。据说,如果至少满足了以下三个条件之一,公司A就可以控制公司B了:

公司A = 公司B。
公司A拥有大于50%的公司B的股票。
公司A控制K(K >= 1)个公司,记为C1, ..., CK,每个公司Ci拥有xi%的公司B的股票,并且x1+ .... + xK > 50%。
给你一个表,每行包括三个数(i,j,p);表明公司i享有公司j的p%的股票。计算所有的数对(h,s),表明公司h控制公司s。至多有100个公司。

写一个程序读入N组数(i,j,p),i,j和p是都在范围(1..100)的正整数,并且找出所有的数对(h,s),使得公司h控制公司s。

INPUT FORMAT
第一行: N,表明接下来三对数的数量。{即(i,j,p)的数量}

第二行到第N+1行: 每行三个整数作为一个三对数(i,j,p),如上文所述。{表示公司 i 拥有公司j p%的股份}

SAMPLE INPUT (file concom.in)
3
1 2 80
2 3 80
3 1 20
OUTPUT FORMAT
输出零个或更多个的控制其他公司的公司。每行包括两个整数A、B,表示A公司控制了B公司。将输出的数对以升序排列。

请不要输出控制自己的公司。

[编辑] SAMPLE OUTPUT (file concom.out)
1 2
1 3
2 3


==================== 华丽的分割线 ====================
  这题对我来说好难,, 实在是难弄出来,, 后来看了提示之后才想到用两个矩阵分别存储公司控制的情况, 如: cont[i][j] 但如果为1 的话代表i公司控制了j公司. 还有一个是占有的股权的矩阵, 如: owns[i][j] 代表i公司直接或间接地占有j公司多少股权..
/*
LANG: C
ID: zqy11001
PROG:concom
*/
#include <stdio.h>
#define MAX 101
#define getint(i) scanf("%d", &i)

int n;
int owns[MAX][MAX];
int cont[MAX][MAX];

void addcont(int a, int b)
{
	int i;
	if(cont[a][b]){
		return;
	}
	cont[a][b] = 1;
	for(i = 1; i < MAX; i++){
		owns[a][i] += owns[b][i];
	}
	for(i = 1; i < MAX; i++){
		if(cont[i][a]){
			addcont(i, b);
		}
	}
	for(i = 1; i < MAX; i++){
		if(owns[a][i] > 50){
			addcont(a, i);
		}
	}
}

void addown(int a, int b, int t)
{
	int i;

	for(i = 1; i < MAX; i++){
		if(cont[i][a]){
			owns[i][b] += t;
		}
	}
	for(i = 1; i < MAX; i++){
		if(owns[i][b] > 50){
			addcont(i, b);
		}
	}
}

int main(void)
{
	int a, b, t;
	int i, j, k;
	freopen("concom.in", "r", stdin);
	freopen("concom.out", "w", stdout);
	getint(n);
	for(i = 1; i < MAX; i++){
		cont[i][i] = 1;
	}
	for(i = 1; i <= n; i++){
		getint(a);
		getint(b);
		getint(t);
		addown(a, b, t);
	}
	for(i = 1; i < MAX; i++){
		for(j = 1; j < MAX; j++){
			if(cont[i][j] && i != j){
				printf("%d %d\n", i, j);
			}
		}
	}
//	getch();
	return 0;
}

0
0
分享到:
评论

相关推荐

    usaco2.3解题报告1

    【标题】:“usaco2.3解题报告1”涉及的知识点主要集中在动态规划和数据结构上,特别是字符串处理和二叉树。 【描述】:“usaco2.3解题报告1”描述了一个生物学背景的问题,需要计算一个大写字母序列最长的前缀可以...

    USACO 题目

    USACO(美国计算机奥林匹克竞赛)是针对高中生的一项编程竞赛,旨在提高参赛者的算法设计、问题解决和编程技能。这个压缩包文件包含了USACO网站上的题目,对于准备机考和提升编程能力非常有帮助。下面我们将深入探讨...

    USACO1.4~2.3C语言题解

    《USACO1.4~2.3C语言题解》是针对USACO(美国计算机奥林匹克)编程竞赛中1.4至2.3阶段的题目解析,主要使用C语言进行解答。USACO旨在提升高中生的算法设计和编程能力,而C语言作为基础且高效的编程语言,常常被用于...

    usaco 源程序 section2.3---section 5.5

    这个压缩包包含了USACO章节2.3到5.5的源程序,涵盖了多个阶段的学习内容。 USACO的每个章节通常会讲解一个或多个编程概念,包括基础的算法、数据结构以及更复杂的主题。让我们详细探讨这些章节可能涉及的知识点: ...

    usaco.rar_USACO 翻译 下载_usaco _usaco 翻译

    1. 学习基本编程概念:了解编程语言的基础语法,如变量、条件语句、循环控制、函数定义等。 2. 掌握数据结构:理解不同类型的数据结构如何存储和操作数据,以及它们在解决问题时的优势。 3. 学习算法:学习各种经典...

    usaco 2010-2011

    ### USACO 2010-2011 季度竞赛概览与关键信息 #### 一、概述 美国计算机奥林匹克(USACO)是面向全球中学生的计算机科学竞赛,旨在发掘并培养计算机科学领域的年轻人才。USACO 2010-2011 季度竞赛于 2010 年 11 月...

    USACO题集及答案

    USACO,全称为United States Computer Olympiad,是一项面向全球中学生的计算机编程竞赛,旨在提升参赛者的算法设计、问题解决和编程能力。该比赛每年举行,分为青铜、白银、黄金和铂金四个级别,难度逐渐递增。...

    usaco 合集usaco 合集usaco 合集

    《USACO 合集:全面解析与学习指南》 USACO,全称为USA Computing Olympiad,是一项针对中学生举办的在线编程竞赛,旨在提升参赛者的算法设计和问题解决能力。这个合集提供了丰富的资源,包括英文原题、中文译题、...

    USACO-Chapter1.rar_it_usaco

    1.1 可能是关于编程语言基础的讲解,例如变量、控制流(条件语句、循环语句)以及函数的使用。这些是任何编程语言的基础,掌握好它们是编写程序的前提。 1.2 可能涵盖了输入/输出(I/O)处理,这是处理用户交互或...

    USACO 1.1 c++源程序

    1. **基础语法**:包括变量声明、运算符、控制流程(if-else, for, while循环)、函数定义与调用等。 2. **数组与字符串操作**:在USACO中,数组常用于处理序列数据,字符串则涉及文本处理问题,如查找、替换和比较...

    USACO翻译及题解

    USACO,全称United States Computer Olympiad,是一项面向全球中学生的计算机编程竞赛,旨在提升参赛者在算法设计、问题解决以及计算机科学基础方面的技能。这个压缩包文件提供了丰富的资源,帮助参赛者或学习者更好...

    usaco traning全部数据

    【标题】"usaco traning全部数据" 涉及的是一个编程竞赛训练平台——USACO(USA Computing Olympiad)的数据集。USACO是一个专门为美国中学生设计的在线编程竞赛,旨在提升参赛者的算法设计和编程能力,特别是在解决...

    usaco历年测试数据

    USACO(美国计算机奥林匹克竞赛)是面向全球中学生的一项编程竞赛,主要涉及算法和问题解决能力。这个压缩包文件“usaco历年测试数据”包含了该赛事历年的测试题目和样例输入输出数据,这对于参赛者准备比赛或者提升...

    USACO答案及详解

    某些USACO题目的答案,很详细,代码清晰结构良好,算法高效易于调试

    USACO历年比赛测试数据:2004年

    USACO,全称United States Computer Olympiad,是美国计算机奥林匹克竞赛,是一项旨在培养青少年编程技能和算法理解的国际性比赛。这个比赛对于有志于在计算机科学领域深入发展的学生来说,具有很高的学习价值和挑战...

    usaco心得及总结

    ### USACO心得及总结 #### 第一部分 动态规划 **USACO**(美国计算机奥林匹克竞赛)作为一项国际知名的编程竞赛,不仅考验参赛者的编程能力,还对其算法理解和应用有着极高的要求。其中,动态规划(Dynamic ...

    USACO全部测试数据.zip

    USACO,全称United States阿Olympiad in Computer Science,是美国计算机科学奥林匹克竞赛,旨在激发中学生对计算机科学的兴趣,尤其是算法和编程技能。这个"USACO全部测试数据.zip"压缩包包含了历年来USACO比赛的...

    USACO历年比赛测试数据:2003年

    USACO(USA Computing Olympiad)是美国计算机奥林匹克竞赛,是一项面向中学生的编程竞赛,旨在提升学生的算法设计、编程和问题解决能力。该比赛通常包括训练营和一系列在线比赛,最终选拔出优秀选手代表美国参加...

    USACO题解+代码+翻译

    USACO,全称United States Computer Olympiad,是一项面向全球中学生的计算机编程竞赛,旨在提升参赛者的算法设计、编程能力和问题解决能力。本压缩包包含了USACO比赛的题解、源代码以及对应的中文翻译,对于想要...

    USACO全部测试数据

    《USACO全部测试数据详解》 USACO,全称United States Computer Olympiad,是美国计算机奥赛,是一项旨在提升青少年计算机编程能力的竞赛。该竞赛覆盖了基础算法、数据结构、问题解决等多个计算机科学的重要领域,...

Global site tag (gtag.js) - Google Analytics