---
# System prepended metadata

title: uva 151 Power Crisis

---

# uva 151 Power Crisis

此題其實就是Josephus Problem
唯一需要注意的就是它永遠都從1號電廠開始關電
所以輸入N個電廠其實只需要做N-1個電廠的Josephus Problem，並且將全部電廠的編號都減一，所以要找最後一個關的電廠是12號的那個
code如下，採用dp的作法，每給定一個N和m的時間複雜度都是$O(n)$

```cpp=
#include <iostream>
#include <string>
#include <cstring>

using namespace std;

#define SIZE 101

int Joseph_Problem_DP(const int n,int& m){
    int Pos[n+1];
    Pos[1]=1;
    for(int i=2;i<=n;i++)
        Pos[i]=(Pos[i-1]+(m-1))%i + 1;

    return Pos[n];
}

int main(){

    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    bool Turn_off[SIZE],Done;

    int N,m;
    bool find;
    while(cin>>N && N!=0){
        if(N==13)
            m=1;
        else{
            m=2;
            while(Joseph_Problem_DP(N-1,m)!=12)m++;
        }

        cout<<m<<endl;
    }
    return 0;
}
```