zoukankan      html  css  js  c++  java
  • Time of Trial

    Time of Trial(思维)

    题目大意:一个人想逃,一个人要阻止那个人逃跑 ,阻止者念每一个符咒的时间为b[i],逃跑者念每一个符咒的时间为a[i],逃跑者如果念完了第i个符咒,阻止者还没有念完或者刚好念完这第i个符咒,此时逃跑者就可以逃跑了。(每个人都不知道对方在念哪一个符咒)

    队友给讲的解题思路首先可以想到的是逃跑者用时最短念完的符咒是最危险的(他可能很快念完然后离开了),所以想到要先阻止对方耗时最少的,次少的,,,,最多的; 但是假如有可能你(阻止者)在念他用时最少的符咒,并且你的时间比他少,把这个符咒锁住了,他逃不了,可是如果他根本没念这个,他念的是别的,当你念完最少(或其他的)来念这个时,他用时较少已经念完他就可以逃跑了。可以发现你根本猜不了,所以你要找一个特定的念符咒的顺序,只要这个顺序可以把所有情况都阻止,那他就逃不了了。那么回到思考的最开始,我们依旧是从逃跑者耗时最少的开始,次少的,,,,以此念下去,把逃跑者当成一开始就在念第i个,我们算按我们的顺序到念完第i个点的时间是否比逃跑者少,如果是就可以阻止他从这个点离开,如果每一个点按我们的顺序都能阻止成功,那么就阻止成功了,一旦有一个没有阻止成功,逃跑者就可以逃跑

    AC_Code

     1  #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <ctime>
     5 #include <cmath>
     6 #include <algorithm>
     7 using namespace std;
     8 typedef long long ll;
     9 const int maxn=1e5+10;
    10 ll n;
    11 struct node
    12 {
    13     ll a;
    14     ll b;
    15 }s[maxn];
    16 
    17 bool cmp(struct node x, struct node y)
    18 {
    19     return x.a<y.a;
    20 }
    21 
    22 int main()
    23 {
    24     ll i,sum=0,flag=0;
    25     scanf("%lld",&n);
    26     for(i=0;i<n;i++)
    27     {
    28         scanf("%lld",&s[i].a);
    29     }
    30     for(i=0;i<n;i++)
    31     {
    32         scanf("%lld",&s[i].b);
    33     }
    34 
    35     sort(s,s+n,cmp);
    36 
    37     for(i=0;i<n;i++)
    38     {
    39         sum += s[i].b;
    40         if( sum<s[i].a )
    41         {
    42             flag++;
    43         }
    44     }
    45     if( flag==n ) printf("Dire victory
    ");
    46     else printf("Redemption
    ");
    47 
    48     return 0;
    49 }
  • 相关阅读:
    openstack nova 基础知识——Quota(配额管理)
    02python注释
    01使用Pycharm编写第一个python程序
    35Angular实现一个todoList
    34Angular实现搜索缓存数据功能
    33Angular实现人员登记系统(表单元件的双向数据绑定)
    32练习
    31封装一个网络请求的服务
    30服务(练习)
    29服务
  • 原文地址:https://www.cnblogs.com/wsy107316/p/11700359.html
Copyright © 2011-2022 走看看