zoukankan      html  css  js  c++  java
  • Topcoder 酱油记

      SRM 632 Div.2 (58/688):

      这场是除了我第一场之外最简单的一场了,前两道太简单,一下就秒了。最后一题复杂度很微妙,感觉深搜会超时,结果貌似没超...看了一下别人的代码,觉得那些用map的人的代码很好,也学着写了一下。现在感觉map真是太有用了。

     1 // BEGIN CUT HERE
     2 
     3 // END CUT HERE
     4 #line 5 "GoodSubset.cpp"
     5 
     6 #include <string>
     7 #include <vector>
     8 #include <map>
     9 #include <iostream>
    10 using namespace std;
    11 typedef long long LL;
    12 #define foreach(it,v) for(__typeof((v).rbegin()) it=(v).rbegin();it!=(v).rend();it++)
    13 const int size = 50001;
    14 
    15 map<int, int> ans;
    16 class GoodSubset {
    17     public:
    18     int numberOfSubsets(int goodValue, vector <int> d) {
    19         for (int i = 0; i < d.size(); i++)
    20         {
    21             foreach(it, ans)
    22             {
    23                 LL y = it->first;
    24                 if (y * d[i] >goodValue) continue;
    25                 ans[y * d[i]] = (ans[y * d[i]] + it->second) % 1000000007ll;
    26             }
    27             ans[d[i]]++;
    28         }
    29         return ans[goodValue];
    30     }
    31 };
    1000

      SRM 633 Div.2 :

      还是没升到Div.1...

      1000是道简单的搜索题,被我想复杂了。注意到a*b=gcd(a,b)*lcm(a,b),所以知道了a之后,我们就可以求出b了。所以对于每个连通分量,我们只需要枚举其中一个数的大小就行了。复杂度O(n*10000)。(这题我用最小最大值优化后挂了...所以对于竞赛来说,能不优化就不优化吧...)

      做算法题不能只是注重算法,还是要分析所给数据范围。

     1 // BEGIN CUT HERE
     2 
     3 // END CUT HERE
     4 #line 5 "GCDLCMEasy.cpp"
     5 
     6 #include <string>
     7 #include <vector>
     8 #include <iostream>
     9 using namespace std;
    10 typedef long long LL;
    11 typedef vector<int> vi;
    12 #define pb push_back
    13 #define foreach(it,v) for(__typeof((v).begin()) it=(v).begin();it!=(v).end();it++)
    14 #define rep(i,n) for(int i=0;i<(n);i++)
    15 #define FOR(i,l,r) for (int i=(l);i<=(r);i++)
    16 const int maxn = 501, maxm = 500001;
    17 
    18 int x[maxn];
    19 int g[maxn], l[maxn];
    20 vi mat[maxn];
    21 
    22 bool vis[maxn];
    23 int dl[maxn], po;
    24 void bl(int v, vector <int> A, vector <int> B)
    25 {
    26     int l = 1, r = 1;
    27     dl[r] = v; vis[v] = 1;
    28     for (; l <= r; v = dl[++l])
    29         for (auto i : mat[v])
    30             if (!vis[A[i] ^ B[i] ^ v])
    31                 dl[++r] = A[i] ^ B[i] ^ v, vis[dl[r]] = 1;
    32     po = r;
    33 }
    34 class GCDLCMEasy {
    35     public:
    36     int gcd(int a, int b)
    37     {
    38         int temp;
    39         while (b != 0) temp = b, b = a % b, a = temp;
    40         return a;
    41     }
    42     string possible(int n, vector <int> A, vector <int> B, vector <int> G, vector <int> L) {
    43         for (int i = 0; i < A.size(); i++)
    44             mat[A[i]].pb(i), mat[B[i]].pb(i);
    45         bool ans = 1;
    46         for (int u = 0, v; u < n; u++) if (!vis[u])
    47         {
    48             bl(u, A, B);
    49             for (x[u] = 1; x[u] <= 10000; x[u]++)
    50             {
    51                 for (int z = 2; z <= po; z++)
    52                     x[dl[z]] = 0;
    53                 bool exist = 1;
    54                 for (int z = 1; z <= po; z++)
    55                 {
    56                     v = dl[z];
    57                     for (auto i : mat[v])
    58                     {
    59                         int ww = A[i] ^ B[i] ^ v;
    60                         if (!x[ww]) x[ww] = G[i] * L[i] / x[v];
    61                         if (gcd(x[v], x[ww]) != G[i]
    62                             || x[v] * x[ww] / gcd(x[v], x[ww]) != L[i]) { exist = 0; break; }
    63                     }
    64                     if (!exist) break;
    65                 }
    66                 if (exist) break;
    67             }
    68             ans &= (x[u] != 10001);
    69         }
    70         return ans ? "Solution exists" : "Solution does not exist";
    71     }
    72 };
    //1000
  • 相关阅读:
    py二级习题
    js 闪烁的文字
    用windows 画图 裁剪照片
    JS 练习
    弧度制与角度制
    Knockout.Js官网学习(event绑定、submit绑定)
    js中进行金额计算 parseFloat 会产生精度问题,toFixed(2) 方法修正
    JQuery通过类选择器捕获click事件获取bai当前点击对象的id, javascript中onclick(this)用法介绍
    jQuery检查元素是否含有指定的class类,使用.hasClass()方法
    ajax的dataType有哪些类型?
  • 原文地址:https://www.cnblogs.com/monmonde/p/3958714.html
Copyright © 2011-2022 走看看