Guest User

Untitled

a guest
Feb 19th, 2012
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.70 KB | None | 0 0
  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <map>
  4. #include <set>
  5. #include <cmath>
  6. #include <vector>
  7. #include <string>
  8. #include <cstring>
  9. #include <iostream>
  10. #include <algorithm>
  11.  
  12. using namespace std;
  13.  
  14.  
  15. const int N = 10000;
  16. int k, ok;
  17. int a[N], b[N], beg[N*2], end[N*2];
  18. int u[N], p[N*2];
  19.  
  20. void dfs(int v, int U = 1) {
  21.     u[v] = U;
  22.     for (int i = p[a[v]+1]; i < b[v] && ok; i = p[i+1])
  23.         if (beg[i]+1) {
  24.             if (b[beg[i]] < b[v])
  25.                 continue;
  26.             if (u[beg[i]] && u[beg[i]] == u[v]) {
  27.                 ok = 0;
  28.                 return;
  29.             }else if(!u[beg[i]])
  30.                 dfs(beg[i], U*-1);
  31.         } else if (end[i]+1) {
  32.             if (a[end[i]] > a[v])
  33.                 continue;
  34.             if (u[end[i]] && u[end[i]] == u[v]) {
  35.                 ok = 0;
  36.                 return;
  37.             } else if(!u[end[i]])
  38.                 dfs(end[i], U*-1);
  39.         }
  40. }
  41.  
  42. void solve() {
  43.     if (!k)return;
  44.     memset(beg, -1, sizeof beg);
  45.     memset(end, -1, sizeof end);
  46.     memset(u, 0, sizeof u);
  47.  
  48.     for (int i = 0; i <= k*2; i++)
  49.         p[i] = i;
  50.  
  51.     for (int i = 0; i < k; i++) {
  52.         //scanf("%d%d", a+i, b+i);
  53.         if (a[i] > b[i])
  54.             swap(a[i], b[i]);
  55.         beg[a[i]] = i;
  56.         end[b[i]] = i;
  57.     }
  58.  
  59.     for (int i = k*2; i > 0; i--)
  60.         if (beg[i-1]==-1&&end[i-1]==-1)
  61.             p[i-1]=p[i];
  62.     ok = 1;
  63.     for (int i = 0; ok && i < k; i++)
  64.         if (!u[i])
  65.             dfs(i);
  66.     if (!ok)printf("im");
  67.     puts("possible");
  68. }
  69.  
  70. int main() {
  71.  
  72.   freopen("dna.in", "r", stdin);
  73.   freopen("dna.out", "w", stdout);
  74.     //while(~scanf("%d", &k))
  75.         //solve();
  76.   k = 10000;
  77.   int i = 0;
  78.   for (int l = 0, r = k - k / 4 - 1; l < k / 4; l++, r--)
  79.   {
  80.     a[i] = l;
  81.     b[i++] = r;
  82.   }
  83.   for (int l = k / 4, r = k - 1; l < k / 2; l++, r--)
  84.   {
  85.     a[i] = l;
  86.     b[i++] = r;
  87.   }
  88.   //cout << i << endl;
  89.   for (int i = 0; i < 128; i++)
  90.     solve();
  91.     return 0;
  92. }
Advertisement
Add Comment
Please, Sign In to add comment