zoukankan      html  css  js  c++  java
  • SRM 653 CountryGroupHard

    SRM 653 CountryGroupHard

    题意:

      n 个人坐成一排,同一个国家的人坐在一起,记者问了一些人他们的国家有多少人,他们都回答了正确的信息。已知m条信息,每条信息形如第 pi 个位置上的人的国家有 ai 个人,求已知了这些信息能否推断出所有人所属国家的情况。

    分析:

      f[i]表示到第i个位置,方案数是多少。然后枚举后面的多少人属于一个国家的。当f[i]>2的时候,设为2就行。初始化f[n]=1。

    代码:

     1 /*
     2 * @Author: mjt
     3 * @Date:   2018-10-17 20:55:42
     4 * @Last Modified by:   mjt
     5 * @Last Modified time: 2018-10-17 21:37:10
     6 */
     7 #include<cstdio>
     8 #include<algorithm>
     9 #include<cstring>
    10 #include<cmath>
    11 #include<iostream>
    12 #include<cctype>
    13 #include<set>
    14 #include<vector>
    15 #include<queue>
    16 #include<map>
    17 #define fi(s) freopen(s,"r",stdin);
    18 #define fo(s) freopen(s,"w",stdout);
    19 using namespace std;
    20 typedef long long LL;
    21 
    22 inline int read() {
    23     int x=0,f=1;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-1;
    24     for(;isdigit(ch);ch=getchar())x=x*10+ch-'0';return x*f;
    25 }
    26 
    27 class CountryGroupHard{
    28 public:
    29     int f[105];
    30     string solve(vector <int> a) {
    31         int n = a.size();
    32         f[n] = 1;
    33         for (int i = n - 1; i >= 0; --i) {
    34             if (a[i] == 0) {
    35                 int ok = -1;
    36                 for (int j = 1; (i + j) <= n; ++j) {
    37                     if (a[i + j - 1] != 0) { // 最近的有数的位置
    38                         if (ok != -1 && ok != a[i + j - 1]) break;
    39                         else ok = a[i + j - 1];
    40                     }
    41                     if (ok == -1 || ok == j) f[i] += f[i + j];
    42                 }
    43             }
    44             else {
    45                 bool ok = (i + a[i] > n); // 要求后面的a[i]个相等
    46                 for (int j = i; j < n && j < i + a[i]; ++j) 
    47                     if (a[j] && a[j] != a[i]) ok = true;
    48                 if (!ok) f[i] = f[i + a[i]];
    49             }
    50             if (f[i] >= 2) f[i] = 2;
    51         }
    52         return f[0] > 1 ? "Insufficient" : "Sufficient";
    53     }
    54 
    55 };
  • 相关阅读:
    00:Java简单了解
    QQ空间相册照片批量导出
    Git基本操作
    【有钱的大佬看过来】Java开发学习大纲
    默认端口号走一波
    获取“今日头条”西瓜视频
    CentOS 下源码安装LAMP环境
    书写是为了更好的思考
    U盘安装Ubuntu 14.04 LTS正式版 出现如下的提示,不能继续,如何操作?
    U盘安装Ubuntu 14.04 LTS正式版
  • 原文地址:https://www.cnblogs.com/mjtcn/p/9807337.html
Copyright © 2011-2022 走看看