zoukankan      html  css  js  c++  java
  • upc组队赛5 Ground Defense【枚举】

    Ground Defense

    题目描述

    You are a denizen of Linetopia, whose n major cities happen to be equally spaced along an east-west line. In fact, they are often numbered in order from 1 to n, where 1 is the westmost city and n is the eastmost city.
    Linetopia was a lovely place to live until forces from neighboring Trapez invaded. As part of Linetopia’s Shielding Lives and Protecting Citizens initiative, you have been called upon to process information about Trapezoid troop movements so we can determine which cities have been hardest hit and know where to send reinforcements.
    Linetopia intelligence has discovered that the Trapezoid forces are attacking in the following pattern. They are sending massive aircraft to drop troops on Linetopia cities. Each aircraft starts at some city i, dropping s soldiers. The aircraft then proceeds to fly either east or west. Each time it flies over another city, it drops a more soldiers than it dropped on the previous city it passed. After performing d drops, the aircraft returns to Trapez to resupply.
    You will be receiving intel updates that inform you of the specs of each Trapezoid aircraft passing over Linetopia. You want to answer queries that ask how many Trapezoid troops have been dropped on a particular city. Are you up to the task?

    输入

    The first line of input contains a single integer T (1 ≤ T ≤ 10), the number of test cases. The first line of each test case contains two integers: m (1 ≤ m ≤ 10,000), the number of updates and queries and n (1 ≤ n ≤ 500,000), the number of cities in Linetopia.
    The next m lines of input are either updates or queries. Update lines begin with a capital U, then contain either a capital E (east) or W (west) to indicate direction, and then contain four integers i (1 ≤ i ≤ n), s (1 ≤ s ≤ 10,000), a (0 ≤ a ≤ 10,000), and d (1 ≤ d ≤ n). These integers signify the starting city, the starting number of soldiers, the increase in soldiers per city, and the number of drops, respectively. You can assume d never results in an aircraft flying to the west of city 1 or to the east of city n.
    Query lines begin with a capital Q, and then contain a single integer i (1 ≤ i ≤ n) indicating the city being queried.

    输出

    For each query in the input, output a single line containing the number of Trapezoid troops dropped in that city.

    样例输入

    1
    8 3
    U E 1 5 2 3
    Q 1
    Q 2
    Q 3
    U W 3 10 10 2
    Q 1
    Q 2
    Q 3
    

    样例输出

    5
    7
    9
    5
    27
    19
    

    提示

    Two aircrafts fly over Linetopia. The first starts at city 1 and heads east. It drops 5 soldiers on city 1, 7
    soldiers on city 2, and 9 soldiers on city 3. The second starts at city 3 and flies west. It drops 10 soldiers on
    city 3 and 20 soldiers on city 2.

    题解

    每次更新的时候就用结构体存下来,

    然后查的时候再遍历结构体计算

    比赛的时候看这题这么少人过,觉得是我们想的太简单了、没怎么敢写,而且一直在怼另外那个E题

    然而真的就是这样做= 。=

    注意long long ,计算的过程中也要强制转换long long,这里WA了两发

    代码

    #include<bits/stdc++.h>
    using namespace std;
    #define pb push_back
    #define mp make_pair
    #define rep(i,a,n) for(int i=a;i<n;++i)
    #define readc(x) scanf("%c",&x)
    #define read(x) scanf("%d",&x)
    #define sca(x) scanf("%d",&x)
    #define read2(x,y) scanf("%d%d",&x,&y)
    #define read3(x,y,z) scanf("%d%d%d",&x,&y,&z)
    #define print(x) printf("%d
    ",x)
    #define mst(a,b) memset(a,b,sizeof(a))
    #define lowbit(x) x&-x
    #define lson(x) x<<1
    #define rson(x) x<<1|1
    #define pb push_back
    #define mp make_pair
    typedef pair<int,int> P;
    typedef long long ll;
    const int INF =0x3f3f3f3f;
    const int inf =0x3f3f3f3f;
    const int mod = 1e9+7;
    const int MAXN = 105;
    const int maxn = 10010;
    struct node
    {
      int st;
      int len;
      int orient;
      int a0;
      int d;
    }p[500005];
    
    char s[5];
    ll a,b,c,d;
    int cnt ;
    int main()
    {
      int t;
      sca(t);
      while(t--)
      {
        cnt = 0;
        int m,n;
        read2(m,n);
        while(m--)
        {
            scanf("%s", s);
            if(s[0] == 'U'){
              scanf("%s",s);
              p[cnt].orient = s[0] == 'E' ;
              scanf("%d%d%d%d",&a,&b,&c,&d);
              p[cnt].st = a;
              p[cnt].a0 = b;
              p[cnt].d = c;
              p[cnt++].len = d;
            }
            else {
              int x;
              read(x);
              ll ans = 0;
              for(int i = 0; i < cnt ;i++){
                if(p[i].orient && x >= p[i].st && x <= p[i].st + p[i].len - 1) {
                   ans += p[i].a0 + (ll)(x - p[i].st) * p[i].d;
                }
                else if(!p[i].orient && x <= p[i].st && x >= p[i].st - p[i].len + 1) {
                   ans += p[i].a0 + (ll)(p[i].st - x) * p[i].d;
                }
              }
              printf("%lld
    ",ans);
            }
        }
      }
      return 0;
    }
    
  • 相关阅读:
    镜像切换Logreader Agent报错:分发数据库中可能存在不一致的状态(续)
    镜像切换Logreader Agent报错:分发数据库中可能存在不一致的状态
    SQL优化案例—— RowNumber分页
    SQL Server 服务器磁盘测试之SQLIO篇(二)
    SQL Server 服务器磁盘测试之SQLIO篇(一)
    SQL Server内存遭遇操作系统进程压榨案例
    git添加ssh公钥报错
    leetcode_1187. Make Array Strictly Increasing 使数组严格递增_[DP]
    leetcode_1293. Shortest Path in a Grid with Obstacles Elimination_[dp动态规划]
    leetcode_1292. Maximum Side Length of a Square with Sum Less than or Equal to Threshold_[二维前缀和]
  • 原文地址:https://www.cnblogs.com/llke/p/10799996.html
Copyright © 2011-2022 走看看