The Consideration of Killing a Thread

 

Regulation A:

 

如果一个非栈资源,一个线程直到终结都持有它,而且只有这个线程能释放这个资源,那么这个线程是不可被杀的!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Java实现: ```java import java.util.*; public class Billionaires { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); Map<String, List<Billionaire>> billionairesByCity = new HashMap<>(); for (int i = 0; i < n; i++) { String name = sc.next(); String city = sc.next(); long fortune = sc.nextLong(); Billionaire billionaire = new Billionaire(name, city, fortune); if (!billionairesByCity.containsKey(city)) { billionairesByCity.put(city, new ArrayList<>()); } billionairesByCity.get(city).add(billionaire); } int m = sc.nextInt(); int k = sc.nextInt(); for (int i = 0; i < k; i++) { int day = sc.nextInt(); String name = sc.next(); String city = sc.next(); List<Billionaire> billionaires = billionairesByCity.get(city); for (Billionaire billionaire : billionaires) { if (billionaire.name.equals(name)) { billionaire.addTravel(day); break; } } } List<String> cities = new ArrayList<>(billionairesByCity.keySet()); Collections.sort(cities); for (String city : cities) { List<Billionaire> billionaires = billionairesByCity.get(city); Map<Integer, Long> wealthByDay = new HashMap<>(); for (Billionaire billionaire : billionaires) { for (int day : billionaire.travels) { wealthByDay.put(day, wealthByDay.getOrDefault(day, 0L) + billionaire.fortune); } } int maxDays = 0; for (int day : wealthByDay.keySet()) { long wealth = wealthByDay.get(day); for (int i = day + 1; i <= m; i++) { long futureWealth = wealthByDay.getOrDefault(i, 0L); if (futureWealth > wealth) { break; } if (i - day > maxDays) { maxDays = i - day; } } } if (maxDays > 0) { System.out.println(city + " " + maxDays); } } } static class Billionaire { String name; String city; long fortune; List<Integer> travels = new ArrayList<>(); public Billionaire(String name, String city, long fortune) { this.name = name; this.city = city; this.fortune = fortune; } public void addTravel(int day) { travels.add(day); } } } ``` 首先,我们读入$n$个亿万富翁的信息,并将它们按照城市分组。我们使用`Map`将每个城市映射到一个亿万富翁列表。对于每个亿万富翁,我们将其添加到其所在城市的列表中。 接下来,我们读入$k$个亿万富翁的旅行记录。对于每个旅行记录,我们找到相应的亿万富翁,并将旅行记录添加到其旅行列表中。 然后,我们对于每个城市,计算每个亿万富翁在每一天的财富总和,并找出对于每个城市,在哪些连续的天数内,其财富总和比其他城市的财富总和更高。我们使用一个`Map`将每个天数映射到该天数的财富总和。对于每个天数,我们计算从该天数开始的最长连续天数,使得该城市的财富总和在这段时间内最高。我们使用一个变量`maxDays`来记录所有城市的最长连续天数。 最后,我们按照字典序对城市进行排序,并输出每个城市的最长连续天数。如果某个城市没有连续的天数使得其财富总和最高,则不输出该城市。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值