zoukankan      html  css  js  c++  java
  • SRM 596 DIV2

    250pt:

    直接枚举跳过的位置求和即可。

    int n,m; 
    int ABS(int a) 
    { 
        if (a < 0) return (-a); 
        else return a; 
    } 
    class FoxAndSightseeing 
    { 
            public: 
            int getMin(vector <int> p) 
            { 
                n = p.size(); 
                int ans = 0; 
                for (int i = 1; i < n - 1; ++i) 
                { 
                    int s = p[0]; 
                    int tmp = 0; 
                    for (int j = 1; j < n; ++j) 
                    { 
                        if (j == i) continue; 
                        tmp += ABS(p[j] - s); 
                        s = p[j]; 
                    } 
                    if (ans == 0 || ans > tmp) ans = tmp; 
                } 
                return ans; 
            } 
    
    
    }; 
    View Code

    500pt:

    很简单的O(n^2)的DP:

    const int inf = 0x7fffffff; 
    int n,m; 
    int dp[N]; 
    bool isok(char a, char b) 
    { 
        if ((a == 'R' && b == 'G') || (a == 'G' && b == 'B') || (a == 'B' && b == 'R')) return true; 
        return false; 
    } 
    
    class ColorfulRoad 
    { 
            public: 
            int getMin(string road) 
            { 
                n = road.size(); 
                for (int i = 0; i < n; ++i) dp[i] = inf; 
                dp[0] = 0; 
                for (int i = 1; i < n; ++i) 
                { 
                    for (int j = 0; j < i; ++j) 
                    { 
                        if (isok(road[j],road[i]) && dp[j] != inf) 
                        { 
                            dp[i] = min(dp[i],dp[j] + (i - j)*(i - j)); 
                        } 
                    } 
                } 
                if (dp[n - 1] == inf) return -1; 
                else return dp[n - 1]; 
            } 
    
    
    }; 
    View Code

    1000pt:

    题意:

    F(n) = (n - 0^2) * (n - 1^2) * (n - 2^2) * (n - 3^2) * ... * (n - k^2), k满足n - k^2 > 0
    然后给出lo,hi,p, 求lo到hi之间的i满足f(i)%p == 0的个数
    lo,div取值为[1,10^12];

    思路:
    比赛的时候想的很乱没写出来,后来想了想当时的思路是错的。无语.....

    http://codeforces.com/blog/entry/9405?locale=en   CF有人讨论了这道题目,一看就明白了。  哎....没有想到啊。

    我大体说一下思路:
    f(n)如果能被p整出,那么f(n)中肯定存在(n - i^2)%p == 0.   i*i < 10^12  那么i <10^6; 

    又有n%p == i^2 % p;  ---> n = i^2 + k*p,  i^2 + k*p < A  所以如果求[1,A]中满足的个数的话,那么其值就为(A - i^2)/p;   如果我们单纯枚举的话求值的话中间会有重复计算的j^2%p = i^2%p;  所以我们利用set记录一下重复的然后计算即可。

    ll getSum(ll A, ll p)
    {
        set<ll> mods;
        ll ans = 0;
        for (ll i = 0LL; i * i < A; ++i)
        {
            if (mods.find((i*i % p)) != mods.end()) continue;
            mods.insert(i*i % p);
            ans += (A - i * i)/p;
        }
        return ans;
    }
    class SparseFactorialDiv2
    {
        public:
        long long getCount(long long lo, long long hi, long long d)
        {
            return getSum(hi, d) - getSum(lo - 1, d);
        }
    
    };
    

      

  • 相关阅读:
    支付宝17年新春红包技术体系剖析
    从“扫月亮”到“扫福字”,扒一扒背后的支付宝AR框架体系
    【合集】支付宝春节红包背后的那些事——集五福,咻红包
    蚂蚁移动开发平台 mPaaS 3.0 智能化 + 生态化
    小程序 Serverless: 解放生产力,驱动研发效能提升
    深度解析:mPaaS 3.0全新组件
    vue--学习一
    .Net Mvc PagedList
    Integrated Security=SSPI
    IIS web site windows验证
  • 原文地址:https://www.cnblogs.com/E-star/p/3403518.html
Copyright © 2011-2022 走看看