zoukankan      html  css  js  c++  java
  • 2020.10.31,2020.11.1 考场代码

    T1 挑战

    40pts

    #include <algorithm>
    #include <cstdio>
    #include <iostream>
    #include <queue>
    using namespace std;
    inline int RD() {
      int intmp(0), insign(1);
      char rdch(getchar());
      while ((rdch != '-') && (rdch < '0' || rdch > '9')) {
        rdch = getchar();
      }
      if (rdch == '-') {
        insign = -1;
        rdch = getchar();
      }
      while (rdch >= '0' && rdch <= '9') {
        intmp *= 10;
        intmp += rdch - '0';
        rdch = getchar();
      }
      return intmp * insign;
    }
    int n, h, ans(0);
    priority_queue<pair<int, int>> q;
    struct Rm {
      int Pai, Mdc, Ls;
      bool operator<(const Rm &x) const { return this->Pai < x.Pai; }
    } R[5005];
    int main() {
      // freopen("ex2.in", "r", stdin);
      n = RD();
      h = RD();
      for (register int i(1); i <= n; ++i) {
        R[i].Pai = RD();
      }
      for (register int i(1); i <= n; ++i) {
        R[i].Mdc = RD();
        R[i].Ls = R[i].Mdc - R[i].Pai;
        q.push(make_pair(R[i].Mdc, i));
      }
      /*sort(R + 1, R + n + 1);
      for (register int i(1); i<= n; ++i) {
              printf("%d %d
    ", R[i].Pai, R[i].Mdc);
      }*/
      while (h > 0 && q.size() > 0) {
        if (R[q.top().second].Pai > h) {
          q.pop();
          continue;
        }
        h += R[q.top().second].Ls;
        q.pop();
        ans++;
        // printf("%d %d
    ", h, ans);
      }
      printf("%d
    ", ans);
      /*while (1) {
        printf("%d
    ", RD());
      }*/
      // system("pause");
      return 0;
    }
    /*
    4 12
    4 8 2 1
    2 0 0 0
    
    3
    
    
    3 10
    10 1 3
    8 0 1
    
    3
    
    
    3 10
    10 6 5
    2  5 0
    
    2
    
    3 10
    10 1 2
    2 0 1
    */
    

    T2 航班复杂度

    25pts

    #include <cstdio>
    #include <iostream>
    #include <queue>
    using namespace std;
    inline int RD() {
      int intmp(0), insign(1);
      char rdch(getchar());
      while ((rdch != '-') && (rdch < '0' || rdch > '9')) {
        rdch = getchar();
      }
      if (rdch == '-') {
        insign = -1;
        rdch = getchar();
      }
      while (rdch >= '0' && rdch <= '9') {
        intmp *= 10;
        intmp += rdch - '0';
        rdch = getchar();
      }
      return intmp * insign;
    }
    struct Edge;
    struct Node {
      bool vsd, avl;
      int O, dep, rol;
      Edge *fst;
    } N[100005];
    struct Edge {
      Node *to;
      Edge *nxt;
    } E[100005], *cnte(E);
    int /* Om(0),*/ C_(0), rcnt(0);
    bool flg(0);
    void Lk(const int &A, const int &B) {
      (++cnte)->to = N + B;
      cnte->nxt = N[A].fst;
      N[A].fst = cnte;
      ++N[A].O;
      // Om = max(N[A].O, Om);
      return;
    }
    void Tarjan() { return; }
    void DFS(Node *now) {
      if (C_ == -1) {
        return;
      }
      if (now->vsd) {    //环根
        if (now->rol) {  //相交
          C_ = -1;
          return;
        }
        now->rol = ++rcnt;  //独立环接驳
        flg = 1;
        return;
      }
      now->vsd = 1;
      Edge *Sid(now->fst);
      while (Sid) {
        /*if(Sid->to->avl) {
                Sid = Sid->nxt;
                continue;
        }*/
        DFS(Sid->to);
        if (flg) {          //向上寻找独立环
          if (!now->rol) {  //中间节
            now->rol = rcnt;
            return;
          }
          if (now->rol < rcnt) {  //相交
            C_ = -1;
            return;
          }
          ++C_;  //独立环根
          flg = 0;
        }
        Sid = Sid->nxt;
      }
      return;
    }
    int m, n, A, B, ans(0);
    bool _0(1);
    long long feb[1005];
    queue<Node> q;
    int main() {
      n = RD();
      m = RD();
      for (register int i(1); i <= m; ++i) {
        A = RD();
        B = RD();
        Lk(A, B);
      }
      for (register int i(1); i <= n; ++i) {
        if (N[i].O > 1) {
          _0 = 0;
        }
      }
      if (_0) {
        printf("0
    ");
        return 0;
      }
      for (register int i(1); i <= n; ++i) {
        if (N[i].avl) {
          continue;
        }
        DFS(&N[i]);
        if (C_ == -1) {
          printf("-1%d
    ", i);
          return 0;
        }
        if (C_ >= 2) {
          printf("2
    ");
          return 0;
        }
        ans = max(ans, C_);
        C_ = 0;
        rcnt = 0;
        for (register int i(1); i <= n; ++i) {
          N[i].vsd = 0;
          N[i].rol = 0;
        }
      }
      printf("%d
    ", ans);
      /*q.push(N[1]);
      N[1].dep = 0;
      int Dep(0);
      /*feb[3] = 1;
      feb[4] = 1;
      for (register int i(5); i <= 159; ++i) {
              feb[i] = feb[i - 3] + feb[i - 2];
              printf("feb %d = %lld,  i^5 = %lld, bi = %lf
    ", i, feb[i], (long
      long)i*i*i * i * i*i*i, (double)feb[i]/ i/ i/ i/i/i/i/i/i/i/i);
      }*/
      /*	while (q.front().dep <= 100 && q.size()) {
                      if(Dep < q.front().dep) {
                              printf("dep %d ans %d dep^3 %d
    ", Dep, ans, Dep* Dep
         * Dep);
                              ++Dep;
                      }
                      ans += max(0, q.front().O - 1);
                      Edge *Sd(q.front().fst);
                      while (Sd) {
                              Sd->to->dep = q.front().dep + 1;
                              q.push(*Sd->to);
                              Sd = Sd->nxt;
                      }
                      q.pop();
              }*/
      /*for (register int i(1); i <= n; ++i) {
    
      }*/
      /*while (1) {
        printf("%d
    ", RD());
      }*/
      return 0;
    }
    /*
    5 5
    1 2
    2 3
    3 4
    4 5
    5 1
    
    0
    
    3 4
    1 2
    2 3
    3 1
    1 3
    
    -1
    
    
    3 3
    1 2
    2 1
    1 3
    
    1
    
    
    4 5
    1 2
    2 1
    2 3
    3 4
    4 3
    
    2
    */
    

    T3 数据生成器

    40pts

    #include <cstdio>
    #include <iostream>
    using namespace std;
    inline int RD() {
    	int intmp(0), insign(1);
    	char rdch(getchar());
    	while ((rdch != '-') && (rdch < '0' || rdch > '9')) {
    		rdch = getchar();
    	}
    	if (rdch == '-') {
    		insign = -1;
    		rdch = getchar();
    	}
    	while (rdch >= '0' && rdch <= '9') {
    		intmp *= 10;
    		intmp += rdch - '0';
    		rdch = getchar();
    	}
    	return intmp * insign;
    }
    int n, lst;
    int L[3000005], R[3000005];
    int ans[3000005];
    int main() {
    	//freopen("ex_generator2.in", "r", stdin);
    	n = RD();
    	/*for (register int i(1); i <= n; ++i) {
    
    	}*/
    	for (register int i(1); i <= n; ++i) {
    		L[i] = RD();
    		R[i] = RD();
    		if(L[i - 1] > R[i]) {
    			ans[i] = 1;
    			lst = L[i];
    		} else {
    			ans[i] = ans[i - 1] + 1;
    			lst = max(lst,L[i]);
    		}
    		ans[0] = max(ans[0], ans[i]);
    	}
    	printf("%d
    ", ans[0]);
    	/*while (1) {
    		printf("%d
    ", RD());
    	}*/
    	return 0;
    }
    /*
    6
    6 10
    1 5
    4 8
    2 5
    6 8
    3 5
    */
    

    T4 排列组合

    10pts

    #include <cstdio>
    #include <iostream>
    using namespace std;
    inline int RD() {
    	int intmp(0), insign(1);
    	char rdch(getchar());
    	while ((rdch != '-') && (rdch < '0' || rdch > '9')) {
    		rdch = getchar();
    	}
    	if (rdch == '-') {
    		insign = -1;
    		rdch = getchar();
    	}
    	while (rdch >= '0' && rdch <= '9') {
    		intmp *= 10;
    		intmp += rdch - '0';
    		rdch = getchar();
    	}
    	return intmp * insign;
    }
    int n, k;
    int a[205];
    int Ma[205][205];
    void DFS(int Dep, int now[205]) {
    	if(Dep > k) {
    		return;
    	}
    	for (register int i(1); i <= n; ++i) {
    		for (register int j(i + 1); j <= i; j++) {
    		}
    	}
    	return;
    }
    int main() {
    	n = RD();
    	k = RD();
    	for (register int i(1); i <= n; ++i) {
    		a[i] = RD();
    		Ma[i][i] = a[i];
    	}
    	for (register int i(1); i <= n; ++i) {
    		for (register int j(i + 1); j <= n; ++j) {
    			Ma[i][j] = max(Ma[i][j - 1], a[j]);
    		}
    	}
    	if(k == 1) {
    		int ans = ((n * (n - 1)) >> 1) +1;
    		for (register int l(1); l < n; ++l) {
    			for (register int i = 1; i + l <= n; ++i) {
    				if(a[i]==a[l+i] && Ma[i][i+l]==a[i]) {
    					//printf("%d,%d %d
    ", a[i], a[l +i], Ma[i][l+i]);
    					ans -= n - 1;
    				}
    			}
    		}
    		printf("%d
    ",ans);
    		return 0;
    	}
    	printf("%d
    ", ((n * (n - 1)) >> 1) +1);
    	return 0;
    }
    /*
    3 2
    3 1 2
    
    
    3 1
    2 1 2
    
    2
    
    3 1
    1 2 1
    
    3
    */
    

    T1 大大大

    100pts

    #include <cstdio>
    #include <iostream>
    using namespace std;
    inline int RD() {
      int intmp(0), insi(1);
      char rdch(getchar());
      while ((rdch < '0' || rdch > '9') && rdch != '-') {
        rdch = getchar();
      }
      if (rdch == '-') {
        insi = -1;
        rdch = getchar();
      }
      while (rdch >= '0' && rdch <= '9') {
        intmp = intmp * 10 + rdch - '0';
        rdch = getchar();
      }
      return intmp * insi;
    }
    long long n, m, ans(0);
    int main() {
      /*while (1) {
        printf("%d
    ", RD());
      }*/
      // n = RD();
      n = 7699;
      // for (n = 1; n <= (1000); n += 11) {
      // n^3 Force 30 pts
      /*ans = 0;
      for (register int i(1); i <= n; ++i) {
        for (register int j(1); j <= n; ++j) {
          for (register int k(1); k <= n; ++k) {
            if (i * j < k) {
              ++ans;
            }
          }
        }
      }
      printf("%lld -> %lld  %lld
    ", n, ans, n * n * n - ans);*/
    
      // n ^ 2 force 60 pts
      ans = 0;
      for (register int k(2); k <= n; ++k) {
        for (register int j(1); j < k; ++j) {
          ans += (k - 1) / j;
        }
      }
      printf("%lld -> %lld  %lld
    ", n, ans, n * n * n - ans);
    
      // n ^ (3/2) 100 pts
      ans = 0;
      for (register int i(1); i <= n; ++i) {
        for (register int j(1); j * i <= n; ++j) {
          ans += n - i * j + 1;
        }
      }
      printf("%lld -> %lld %lld
    ", n, ans, n * n * n - ans);
      //}
      /*for (register int i(1); i <= n; ++i) {
        for (register int j(1); j * i <= n; ++j) {
          ans += n - i * j;
        }
      }
      printf("%lld
    ", n * n * n - ans);*/
      system("pause");
      return 0;
    }
    

    T1club

    #include <cstdio>
    #include <iostream>
    using namespace std;
    inline int RD() {
      int intmp(0), insi(1);
      char rdch(getchar());
      while ((rdch < '0' || rdch > '9') && rdch != '-') {
        rdch = getchar();
      }
      if (rdch == '-') {
        insi = -1;
        rdch = getchar();
      }
      while (rdch >= '0' && rdch <= '9') {
        intmp = intmp * 10 + rdch - '0';
        rdch = getchar();
      }
      return intmp * insi;
    }
    long long n, m, ans1(0), ans2(0), ans3(0);
    int main() {
      /*while (1) {
        printf("%d
    ", RD());
      }*/
      // n = RD();
      for (n = 7699; n <= (100000); ++n) {
        // n^3 Force 30 pts
        /*ans1 = 0;
        for (register int i(1); i <= n; ++i) {
          for (register int j(1); j <= n; ++j) {
            for (register int k(1); k <= n; ++k) {
              if (i * j < k) {
                ++ans1;
              }
            }
          }
        }*/
        // printf("%lld -> %lld  %lld
    ", n, ans, n * n * n - ans);
    
        // n ^ 2 force 60 pts
        ans2 = 0;
        for (register int k(2); k <= n; ++k) {
          for (register int j(1); j < k; ++j) {
            ans2 += (k - 1) / j;
          }
        }
        // printf("%lld -> %lld  %lld
    ", n, ans, n * n * n - ans);
    
        // n ^ (3/2) 100 pts
        ans3 = 0;
        for (register int i(1); i <= n; ++i) {
          for (register int j(1); j * i <= n; ++j) {
            ans3 += n - i * j;
          }
        }
        if (/*ans1 == ans2 && */ ans2 == ans3) {
          printf("AC %lld %lld
    ", n, n * n * n - ans2);
        } else {
          printf("WA %lld %lld %lld", n, /* n * n * n - ans1,*/ n * n * n - ans2,
                 n * n * n - ans2);
          break;
        }
      }
      /*
      for (register int i(1); i <= n; ++i) {
        for (register int j(1); j * i <= n; ++j) {
          ans += n - i * j;
        }
      }*/
      // printf("%lld
    ", n * n * n - ans);
      system("pause");
      return 0;
    }
    

    T2 kkk

    0pts

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    using namespace std;
    inline int RD() {
      int intmp(0), insi(1);
      char rdch(getchar());
      while ((rdch < '0' || rdch > '9') && rdch != '-') {
        rdch = getchar();
      }
      if (rdch == '-') {
        insi = -1;
        rdch = getchar();
      }
      while (rdch >= '0' && rdch <= '9') {
        intmp = intmp * 10 + rdch - '0';
        rdch = getchar();
      }
      return intmp * insi;
    }
    int n, m, k, p, l, t;
    int A, B, C;
    int a[505];
    int fy[505][505];
    bool /*f[505][505][25],*/ flg(0);  // i 到 j 有 %p=k 的路径
    struct Edge;
    struct Node {
      Edge *fst;
      bool imp;
    } N[505];
    struct Edge {
      Node *to;
      Edge *nxt;
      int Val;
    } E[505], *cnte(E + 0);
    inline void Clr() {
      memset(N, 0, sizeof(N));
      // memset(f, 0, sizeof(f));
      memset(fy, 0, sizeof(fy));
      memset(a, 0, sizeof(a));
      flg = 0;
      return;
    }
    inline void Lk(const int &x, const int &y, const int &v) {
      /* (++cnte)->to = N + y;
       cnte->nxt = N[x].fst;
       N[x].fst = cnte;
       cnte->Val = v;*/
      // f[x][y][v] = 1;
      fy[x][y] |= (1 << v);
      return;
    }
    int main() {
      /*while (1) {
        printf("%d
    ", RD());
      }*/
      t = RD();
      for (register int T(1); T <= t; ++T) {
        Clr();
        n = RD();
        m = RD();
        k = RD();
        p = RD();
        l = RD();
        cnte = E + 0;
        for (register int i(1); i <= k; ++i) {
          a[i] = RD();
          // printf("%d %d
    ", i, a[i]);
          // N[a[i]].imp = 1;
        }
        /*for (register int i(1); i <= k; ++i) {
          printf("%d
    ", a[i]);
        }*/
        for (register int i(1); i <= m; ++i) {
          A = RD();
          B = RD();
          C = RD();
          Lk(A, B, C);
          Lk(B, A, C);
        }
        for (register int i(1); i <= n; ++i) {
          fy[i][i] |= 1;
        }
        // floyd
        for (register int j(1); j <= n; ++j) {
          for (register int i(1); i <= n; ++i) {
            // if (k != i) {
            for (register int ik(0); ik < p; ++ik) {
              if (fy[i][j] & (1 << ik)) {
                for (register int e(1); e <= n; ++e) {
                  // if (e != k && e != i) {
                  // for (register int j(0); j < p; ++j) {
                  // f[i][e][j] |= f[k][e][(j + p - ik) % p];
                  fy[i][e] |= fy[j][e] >> ik;
                  fy[i][e] |= (fy[j][e] & ((1 << ik) - 1)) << (p - ik);
                  // }
                  // }
                }
              }
            }
            // }
          }
        }
        /*   for (register int i(1); i <= n; ++i) {
             for (register int j(1); j <= n; ++j) {
               for (register int kk(0); kk < p; ++kk) {
                 if (fy[i][j] & (1 << kk)) {
                   printf("%d to %d len %d
    ", i, j, kk);
                 }
               }
             }
           }*/
        for (register int i(1); i <= k; ++i) {
          if (flg) {
            break;
          }
          for (register int j(i); j <= k; ++j) {
            // printf("%d %d %d %d
    ", i, j, a[i], a[j]);
            if (fy[a[i]][a[j]] & (1 << l)) {
              printf("YES
    ");
              flg = 1;
              break;
            }
          }
        }
        if (flg) {
          continue;
        }
        printf("NO
    ");
      }
      system("pause");
      return 0;
    }
    /*
    4
    2 2 2 5 3
    1 2
    1 2 1
    2 1 1
    2 2 2 5 0
    1 2
    1 2 1
    2 1 1
    2 2 2 5 1
    1 2
    1 2 1
    2 1 1
    3 2 2 4 3
    1 3
    1 2 1
    2 3 1
    
    YES
    YES
    YES
    NO
    
    1
    3 2 2 4 3
    1 3
    1 2 1
    2 3 1
    */
    

    T3 A的B次方

    40pts

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    using namespace std;
    inline long long RD() {
      long long intmp(0), insi(1);
      char rdch(getchar());
      while ((rdch < '0' || rdch > '9') && rdch != '-') {
        rdch = getchar();
      }
      if (rdch == '-') {
        insi = -1;
        rdch = getchar();
      }
      while (rdch >= '0' && rdch <= '9') {
        intmp = intmp * 10 + rdch - '0';
        rdch = getchar();
      }
      return intmp * insi;
    }
    int n, m, k, l, t;
    int p;
    long long a, b;
    bool f[505][505][25], flg(0);  // i 到 j 有 %p=k 的路径
    int ksm(int x, long long y) {
      if (y == 0) {
        return 1;
      }
      if (y == 1) {
        return x;
      }
      int tmp = ksm(x, y >> 1);
      tmp = (long long)tmp * tmp % p;
      if (y % 2) {
        return (int)((long long)(x)*tmp % p);
      }
      return tmp;
    }
    int main() {
      /*while (1) {
        printf("%d
    ", RD());
      }*/
      /*p = 0x3f3f3f3f;
      while (1) {
        a = RD();
        b = RD();
        printf("%d
    ", ksm((int)(a % p), b));
      }*/
      a = RD();
      p = RD();
      for (register long long i(1); i <= 1005; ++i) {
        if (ksm(int(a % p), i) == ksm(int(i % p), a) && (i != a)) {
          printf("%lld
    ", i);
          // break;
        }
      }
      system("pause");
      return 0;
    }
    

    T4 灯塔

    20pts

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    using namespace std;
    inline long long RD() {
      long long intmp(0), insi(1);
      char rdch(getchar());
      while ((rdch < '0' || rdch > '9') && rdch != '-') {
        rdch = getchar();
      }
      if (rdch == '-') {
        insi = -1;
        rdch = getchar();
      }
      while (rdch >= '0' && rdch <= '9') {
        intmp = intmp * 10 + rdch - '0';
        rdch = getchar();
      }
      return intmp * insi;
    }
    bool flg(0);
    int n, ans(0), tmp(0);
    int a[3000005];
    int dfrlt[3000005];
    int lst[3000005];
    int main() {
      /*while (1) {
        printf("%d
    ", RD());
      }*/
      n = RD();
      lst[0] = 0;
      for (register int i(1); i <= n; ++i) {
        a[i] = RD();
      }
      if (n > 10000) {
        for (register int i(1); i <= n; ++i) {
          ++dfrlt[i + 1];
          --dfrlt[min(i + a[i] + 1, n)];
          lst[i] = lst[i - 1] + dfrlt[i];
          // printf("%d -- %d
    ", i, lst[i]);
          tmp = 0;
          for (register int j(max(1, i - a[i])); j < i - 1; ++j) {
            tmp = max(lst[j], tmp);
          }
          ans ^= tmp;
          // printf("%d %d
    ", i, tmp);
        }
        printf("%d
    ", ans);
        // system("pause");
        return 0;
      }
      ans = 0;
      for (register int k(1); k <= n; ++k) {
        tmp = 0;
        for (register int i(1); i < k - 1; ++i) {
          for (register int j((k + i + 1) >> 1); j < k; ++j) {
            if (j <= i + a[i] && j >= k - a[k]) {
              ++tmp;
              break;
            }
          }
        }
        printf("%d %d
    ", k, tmp);
        ans ^= tmp;
      }
      printf("%d
    ", ans);
      system("pause");
      return 0;
    }
    
  • 相关阅读:
    关于php的变量类型以及数据类型的转换
    关于mysql的个人理解
    关于sql的的数据操作
    关于数据库的安装,使用以及数据表的创建,修改,查询属性
    关于计算器,全选全不选试题
    Reverse proxy
    网站统计IP PV UV
    Android屏幕适配全攻略
    Android中android.graphics下面的绘制图形类Canvas,Paint,Bitmap,Drawable
    Android项目中导入support v4和v7
  • 原文地址:https://www.cnblogs.com/Wild-Donkey/p/13872546.html
Copyright © 2011-2022 走看看