• [HNOI2005]狡猾的商人


    1202: [HNOI2005]狡猾的商人

    Time Limit: 10 Sec  Memory Limit: 162 MB
    Submit: 3286  Solved: 1561
    [Submit][Status][Discuss]

    Description

    刁姹接到一个任务,为税务部门调查一位商人的账本,看看账本是不是伪造的。账本上记录了n个月以来的收入情况,其中第i 个月的收入额为Ai(i=1,2,3...n-1,n), 。当 Ai大于0时表示这个月盈利Ai 元,当 Ai小于0时表示这个月亏损Ai 元。所谓一段时间内的总收入,就是这段时间内每个月的收入额的总和。 刁姹的任务是秘密进行的,为了调查商人的账本,她只好跑到商人那里打工。她趁商人不在时去偷看账本,可是她无法将账本偷出来,每次偷看账本时她都只能看某段时间内账本上记录的收入情况,并且她只能记住这段时间内的总收入。 现在,刁姹总共偷看了m次账本,当然也就记住了m段时间内的总收入,你的任务是根据记住的这些信息来判断账本是不是假的。

    Input

    第一行为一个正整数w,其中w < 100,表示有w组数据,即w个账本,需要你判断。每组数据的第一行为两个正整数n和m,其中n < 100,m < 1000,分别表示对应的账本记录了多少个月的收入情况以及偷看了多少次账本。接下来的m行表示刁姹偷看m次账本后记住的m条信息,每条信息占一行,有三个整数s,t和v,表示从第s个月到第t个月(包含第t个月)的总收入为v,这里假设s总是小于等于t。

    Output

    包含w行,每行是true或false,其中第i行为true当且仅当第i组数据,即第i个账本不是假的;第i行为false当且仅当第i组数据,即第i个账本是假的。

    Sample Input

    2
    3 3
    1 2 10
    1 3 -5
    3 3 -15
    5 3
    1 5 100
    3 5 50
    1 2 51

    Sample Output

    true
    false
     
    //网上说的是用带权并查集做,但是,随便搞搞似乎也能搞出来
    结构体 A[i] 保存了 i 月到 to 月的总和(v),然后不断读数并且递归更新,保证 A[i].to 尽量小,这样有错误就很容易判断出来
     1 #include <iostream>
     2 #include <stdio.h>
     3 #include <string.h>
     4 
     5 using namespace std;
     6 
     7 #define MAXN 105
     8 struct Node
     9 {
    10     int to;
    11     int v;
    12 }A[MAXN];
    13 
    14 int n,m;
    15 int ok;
    16 
    17 void Init()
    18 {
    19     for (int i=1;i<=n;i++)
    20         A[i].to=-1;
    21 }
    22 
    23 void update(int s,int e,int w)
    24 {
    25     if (A[s].to==-1)
    26     {
    27         A[s].to=e;
    28         A[s].v=w;
    29     }
    30     else
    31     {
    32         Node p = (Node){e,w};
    33         if (A[s].to>p.to)
    34             swap(A[s],p);
    35         if (A[s].to==p.to)
    36         {
    37             if (A[s].v!=p.v)
    38                 ok=0;
    39             return;
    40         }
    41         update( A[s].to+1 , p.to ,p.v-A[s].v);
    42     }
    43 }
    44 
    45 int main()
    46 {
    47     int T;
    48     cin>>T;
    49     while (T--)
    50     {
    51         scanf("%d%d",&n,&m);
    52         Init();
    53         ok=1;
    54         for (int i=0;i<m;i++)
    55         {
    56             int s,e,w;
    57             scanf("%d%d%d",&s,&e,&w);
    58             update(s,e,w);
    59         }
    60         if (ok)
    61             printf("true
    ");
    62         else
    63             printf("false
    ");
    64     }
    65     return 0;
    66 }
    View Code
  • 相关阅读:
    AE开发 入门教程
    工作空间工厂 打开文件例子
    Delphi IDE使用的一些主要技巧
    动画演示 Delphi 2007 IDE 功能[2]
    Delphi的类与继承
    属性的自动完成
    DELPHI中函数、过程变量的声明与应用
    Delphi回车键切换焦点
    delphi 窗体的创建和释放
    delphi assigned函数的用法
  • 原文地址:https://www.cnblogs.com/haoabcd2010/p/6601995.html
Copyright © 2020-2023  润新知