首页
学习
活动
专区
圈层
工具
发布

srm 534

作者头像
全栈程序员站长
发布2022-07-08 18:52:23
发布2022-07-08 18:52:23
1600
举报

大家好,又见面了,我是全栈君。

250


Description

给你一个1*n的棋盘。两人轮流行动,每一个人能够把”o”向右移动到空格子。或者跨越连续两个”o”到空格子。 一个”o”到最右端的时候消失。问谁获胜。

Solution

一个比較有趣的题,我们考虑每一个”o”到最右端的距离。两种行动事实上都是改变距离的奇偶,所以事实上仅仅须要考虑终于状态和距离和的奇偶性就可以。

Code

代码语言:javascript
复制
#include <bits/stdc++.h>
using namespace std;
const int N = 20;
int d[(1 << N) + 10];
class EllysCheckers {
    public:
    string getWinner(string board) {
        int n = board.size();
        int t = 0;
        for (int i = 0; i < n; ++i) {
            if (board[i] == 'o')    t += n - i - 1;
        }
        return t & 1 ? "YES" : "NO";
    }
};

500


Description:

求把一个 n(n≤1018) 数分解成几个给定的数组中的几个数的乘积形式的方案数,要求从给定数组中选出的数要两两互质。

Solution

非常easy反应到,因为 2×3×...×43>1018 ,所以事实上 n 会被分解成不超过15个质数,且每一个质数相应的数组中的数仅仅有一个。就能够状压dp了。 也能够直接用map来dp,能够证明,状态数不会太多。

Code:

代码语言:javascript
复制
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define mp make_pair
#define F first
#define S second
typedef long long LL;
typedef pair<int, int> pii;
int p[20];
const int N = 505;
LL a[N];
vector<int> b;
map<LL, LL> dp;
map<LL, LL>:: iterator it;
class EllysNumbers {
    public:
        long long getSubsets(long long n, vector <string> special) {
            string s = accumulate(special.begin(), special.end(), string());
            istringstream ss(s);
            int m = 0, x;
            while (ss >> x) a[m++] = x;
            for (int i = 0; i < m; ++i)
                if (__gcd(a[i], n / a[i]) == 1) b.pb(a[i]);
            dp[n] = 1;
            for (int i = 0; i < b.size(); ++i)
                for (it = dp.begin(); it != dp.end(); it++)
                    if (it -> F % b[i] == 0) {
                        dp[it -> F / b[i]] += it -> S;
                    }
            return dp[1];
        }
};

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/116012.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年1月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 250
  • Description
    • 给你一个1*n的棋盘。两人轮流行动,每一个人能够把”o”向右移动到空格子。或者跨越连续两个”o”到空格子。 一个”o”到最右端的时候消失。问谁获胜。
  • Solution
    • 一个比較有趣的题,我们考虑每一个”o”到最右端的距离。两种行动事实上都是改变距离的奇偶,所以事实上仅仅须要考虑终于状态和距离和的奇偶性就可以。
  • Code
  • 500
  • Description:
    • 求把一个 n(n≤1018) 数分解成几个给定的数组中的几个数的乘积形式的方案数,要求从给定数组中选出的数要两两互质。
  • Solution
    • 非常easy反应到,因为 2×3×...×43>1018 ,所以事实上 n 会被分解成不超过15个质数,且每一个质数相应的数组中的数仅仅有一个。就能够状压dp了。 也能够直接用map来dp,能够证明,状态数不会太多。
  • Code:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档