HDOJ1536 S-nim
生活随笔
收集整理的這篇文章主要介紹了
HDOJ1536 S-nim
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題意:典型的SG值問題,給n個堆,m個數字,每次只能從一個堆取m個數字之一。
分析:照著做就完事了,但是我不清楚為什么在這題迭代沒有遞歸塊?what?
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int k, a[100], f[10001]; int mex(int p) {int i, t;bool g[101] = { 0 };for (i = 0; i < k; i++){t = p - a[i];if (t < 0)break;if (f[t] == -1)f[t] = mex(t);g[f[t]] = 1;}for (i = 0;; i++){if (!g[i])return i;} } int main() {int n, i, m, t, s;while (scanf("%d", &k), k){for (i = 0; i < k; i++)scanf("%d", &a[i]);sort(a, a + k);memset(f, -1, sizeof(f));f[0] = 0;scanf("%d", &n);while (n--){scanf("%d", &m);s = 0;while (m--){scanf("%d", &t);if (f[t] == -1)f[t] = mex(t);s = s ^ f[t];}if (s == 0)printf("L");elseprintf("W");}printf("\n");} }迭代竟然TL,不懂,是數據問題嗎?
#include<iostream> #include<string.h> #include<sstream> #include<set> #include<algorithm> #include<vector> #include<map> #include<queue> #include<math.h> using namespace std; const int N = 100+5; int f[N]; int M[N]; int hashz[N]; int k, m, l; int SG[N]; int getf(int n) {for (int i = 1; i <= n; i++) {memset(hashz, 0, sizeof(hashz));for (int j = 1; f[j] <= i; j++) {hashz[SG[i - f[j]]] = 1;}for (int j = 0; j <= n; j++) {if (hashz[j] == 0) {SG[i] = j;break;}}}return SG[n]; } int main() {char ans[N];while (cin >> k && k) {for (int i = 1; i <= k; i++)cin >> f[i];f[k + 1] = 100000000;cin >> m;for (int i = 0; i < m; i++) {cin >> l;int sum = 0;memset(SG, 0, sizeof(SG));for (int j = 0; j < l; j++) {cin >> M[j];sum =sum^ getf(M[j]);}if (sum == 0)cout << "L";//ans[i] = 'L';elsecout << "W";//ans[i] = 'W';}//for (int i = 0; i < m; i++)cout << ans[i]; cout << endl;} }?
總結
以上是生活随笔為你收集整理的HDOJ1536 S-nim的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Nim游戏SG版本
- 下一篇: HDOJ1907 SG问题