Sicily-1063

一.题意

一个员工是另外一个员工的老板必须满足的条件是作为老板的员工的薪水salary必须大于这个员工,而且作为老板的员工的身高height要大于等于这个员工。首先按照薪水的多少从小到大进行排序,然后找每一个员工的直属老板。注意老板的下属的数量为其下属的下属之和。

二.用结构体。为了方便查询再加设一个按id号排序的数组。

三. 注意员工老板的后代包括这些员工后代的和。每次vector都要清空一次。

四. 代码

 1 //
 2 //  main.cpp
 3 //  sicily-1063
 4 //
 5 //  Created by ashley on 14-10-13.
 6 //  Copyright (c) 2014年 ashley. All rights reserved.
 7 //
 8
 9 #include <iostream>
10 #include <vector>
11 #include <algorithm>
12 using namespace std;
13 typedef struct
14 {
15     int idNumber;
16     int salary;
17     int height;
18     int bossId;
19     int subordinates;
20 }employee;
21 vector<employee> allEmployees;
22 employee sortByID[1000000];
23 int query[200];
24 bool compare(employee left, employee right)
25 {
26     return left.salary < right.salary;
27 }
28 int main(int argc, const char * argv[])
29 {
30     int cases;
31     int employeeCounter, queryCounter;
32     int id, sal, hei;
33     cin >> cases;
34     while (cases--) {
35         allEmployees.clear();
36         cin >> employeeCounter >> queryCounter;
37         for (int i = 0; i < employeeCounter; i++) {
38             cin >> id >> sal >> hei;
39             allEmployees.push_back(employee{id, sal, hei, 0, 0});
40         }
41         for (int i = 0; i < queryCounter; i++) {
42             cin >> query[i];
43         }
44         sort(allEmployees.begin(), allEmployees.begin() + employeeCounter, compare);
45         //找boss
46         for (int i = 0; i < employeeCounter; i++) {
47             int key = -1;
48             for (int j = i + 1; j < employeeCounter; j++) {
49                 if (allEmployees[j].height >= allEmployees[i].height) {
50                     key = j;
51                     break;
52                 }
53             }
54             if (key != -1) {
55                 allEmployees[i].bossId = allEmployees[key].idNumber;
56                 allEmployees[key].subordinates = allEmployees[key].subordinates + allEmployees[i].subordinates + 1;
57             }
58             sortByID[allEmployees[i].idNumber] = allEmployees[i];
59         }
60         for (int i = 0; i < queryCounter; i++) {
61             cout << sortByID[query[i]].bossId << " " << sortByID[query[i]].subordinates << endl;
62         }
63     }
64     return 0;
65 }
时间: 2024-11-10 03:26:44

Sicily-1063的相关文章

sicily 1063. Who&#39;s the Boss

Time Limit: 1sec    Memory Limit:32MB Description Several surveys indicate that the taller you are, the higher you can climb the corporate ladder. At TALL Enterprises Inc. this "de facto standard" has been properly formalized: your boss is alway

编程题目分类(剪辑)

1. 编程入门 2. 数据结构 3. 字符串 4. 排序 5. 图遍历 6. 图算法 7. 搜索:剪枝,启发式搜索 8. 动态规划/递推 9. 分治/递归 10. 贪心 11. 模拟 12. 算术与代数 13. 组合问题 14. 数论 15. 网格,几何,计算几何 [编程入门] PC 110101, uva 100, The 3n+1 problem, 难度 1 PC 110102, uva 10189, Minesweeper, 难度 1 PC 110103, uva 10137, The T

hdu 1063 Exponentiation

http://acm.hdu.edu.cn/showproblem.php?pid=1063 1 import java.math.BigDecimal; 2 import java.util.*; 3 public class Main { 4 public static void main(String []args) 5 { 6 Scanner cin=new Scanner(System.in); 7 BigDecimal r,mutil; 8 String ans; 9 int n;

Sicily 1146:Lenny&#39;s Lucky Lotto(dp)

题意:给出N,M,问有多少个长度为N的整数序列,满足所有数都在[1,M]内,并且每一个数至少是前一个数的两倍.例如给出N=4, M=10, 则有4个长度为4的整数序列满足条件: [1, 2, 4, 8], [1, 2, 4, 9], [1, 2, 4, 10], [1, 2, 5, 10] 分析:可用动态规划解题,假设dp[i][j],代表满足以整数i为尾数,长度为j的序列的个数(其中每一个数至少是前一个数的两倍).那么对于整数i,dp[i][j] 等于所有dp[k][j-1]的和,其中k满足:

ArgumentError: Error #1063: BasicChart/dataFunc() 的参数数量不匹配。应该有 2 个,当前为 3 个。

1.错误描述 ArgumentError: Error #1063: BasicChart/dataFunc() 的参数数量不匹配.应该有 2 个,当前为 3 个. at mx.charts.chartClasses::Series/cacheDefaultValues()[E:\dev\4.0.0\frameworks\projects\datavisualization\src\mx\charts\chartClasses\Series.as:1260] at mx.charts.serie

NOJ 1063 生活的烦恼

描述 生活的暑假刚集训开始,他要决心学好字典树,二叉树,线段树和各种树,但生活在OJ上刷题的时候就遇到了一个特别烦恼的问题.那当然就是他最喜欢的二二叉树咯!题目是这样的:给你一颗非空的二叉树,然后再给你一个整数n,让生活输出这颗二叉树的第n(n>0且n<=树的深度)层,出题者为了给生活降低难度,要求两个输出数据之间用'~'隔开.看来我们的出题人很有爱啊! 输入 第一行输入一个数N,表示有N组测试数据.接下来N行,每行一个字符串,用'#'表示为空的节点,树的结束标志为'@'.'@'后仅有一个空格

九度oj 题目1063:整数和

题目1063:整数和 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4043 解决:2638 题目描述: 编写程序,读入一个整数N.若N为非负数,则计算N到2N之间的整数和:若N为一个负数,则求2N到N之间的整数和 输入: 一个整数N,N的绝对值小于等于1000 输出: 测试数据可能有多组,对于每一组数据,输出题目要求的值 样例输入: 1 -1 样例输出: 3 -3 1 #include <iostream> 2 using namespace std; 3 int main(){

PAT 1063. Set Similarity (25)

1063. Set Similarity (25) Given two sets of integers, the similarity of the sets is defined to be Nc/Nt*100%, where Nc is the number of distinct common numbers shared by the two sets, and Nt is the total number of distinct numbers in the two sets. Yo

hdoj 1063

地址:http://acm.hdu.edu.cn/showproblem.php?pid=1063 1 import java.math.BigInteger; 2 import java.math.BigDecimal; 3 import java.util.Scanner; 4 5 public class Main { 6 7 public static void main(String[] args) { 8 Scanner cin = new Scanner(System.in); 9

sicily 1345 能量项链

先模拟一下确定理解题意,然后再找状态转移方程,注意方向~ 1 //sicily 1345 能量项链 2 #include <bits/stdc++.h> 3 4 using namespace std; 5 6 int a[205]; 7 int dp[205][205]; 8 9 int main() 10 { 11 int n; 12 while(cin >> n) 13 { 14 memset(dp, 0, sizeof(dp)); 15 for(int i=0; i<