zoukankan      html  css  js  c++  java
  • UVA 10273 Eat or Not to Eat?

    UVA_10273

        因为放在了图论的分类里,一开始没敢写暴力,后来发现题解基本也都是用的暴力,就用暴力写了。

        枚举的周期为所有奶牛的产奶周期的最小公倍数,如果当前枚举周期内没有奶牛被杀,那么这个状态就稳定了。

    #include<stdio.h>
    #include<string.h>
    #define MAXD 1010
    #define INF 1000000000
    int N, T, t[MAXD], d[MAXD][20], U[MAXD], D[MAXD], st[MAXD];
    int gcd(int a, int b)
    {
    return b == 0 ? a : gcd(b, a % b);
    }
    void init()
    {
    int i, j, k;
    scanf("%d", &N);
    for(i = 1; i <= N; i ++)
    {
    scanf("%d", &t[i]);
    for(j = 0; j < t[i]; j ++)
    scanf("%d", &d[i][j]);
    }
    for(i = 0; i <= N; i ++)
    {
    D[i] = i + 1;
    U[i + 1] = i;
    }
    D[N] = 0;
    memset(st, 0, sizeof(st));
    T = 1;
    for(i = 1; i <= N; i ++)
    {
    if(T < t[i])
    k = gcd(t[i], T);
    else
    k = gcd(T, t[i]);
    T = T * t[i] / k;
    }
    }
    void solve()
    {
    int i, j, k, cur, min, num, flag, a, p, sum;
    num = min = 0;
    for(p = 0;; p ++)
    {
    flag = 0;
    for(cur = 1; cur <= T; cur ++)
    {
    a = INF;
    for(i = D[0]; i != 0; i = D[i])
    {
    if(d[i][st[i]] < a)
    {
    a = d[i][st[i]];
    k = i;
    sum = 1;
    }
    else if(d[i][st[i]] == a)
    sum ++;
    st[i] = (st[i] + 1) % t[i];
    }
    if(sum == 1)
    {
    flag = 1;
    U[D[k]] = U[k];
    D[U[k]] = D[k];
    min = p * T + cur;
    num ++;
    }
    }
    if(!flag)
    break;
    }
    printf("%d %d\n", N - num, min);
    }
    int main()
    {
    int test;
    scanf("%d", &test);
    while(test --)
    {
    init();
    solve();
    }
    return 0;
    }


  • 相关阅读:
    pexpect库学习之包装类详解
    spawn类expect方法详解
    spawn类参数command详解
    Django中如何实现数据库路由?
    Memcached中的存取命令详解
    Javascript的参数详解
    Python中Paramiko协程方式详解
    Greenlets间如何实现互相通信?
    Gevent中的同步与异步详解
    jQuery正则的使用方法步骤详解
  • 原文地址:https://www.cnblogs.com/staginner/p/2225649.html
Copyright © 2011-2022 走看看