玲珑杯 #9 A 质数 B 博弈 C 不会

玲珑杯 #9

tangjz老师出的题,一伙大佬来抢钱,本菜鸡连签到题都做不了,只能补补题了==

官方题解

A.Check-in Problem

题意:判断n是否恰好有p个因子,p为质数,1<=n<=1e18,p>2。

tags: 1、因为p>2知n肯定是一个大于1的非素数,由算术基本定理N=(P1^a1)*(P2^a2)*(P3^a3)......(Pn^an), n的因子个数就是(a1+1)×(a2+1)×(a3+1)×...×(an+1)。又因为p是质数,所以n的质因子只能有一个p1,且n=p1^(p-1)。       2、所以只要判断n开p-1次方是质数即可。对于p>3的情况,直接预处理出1e6内的质数就行;对于p==3的情况,用 Miller-Rabin 算法判定(需要 O(1) 的模乘法)。      但不知道哪里错了,挖了十几发都过不了,留坑待补

B.Alice and Bob

题意:k层的完美二叉树,两人博弈,轮流任取一个点,必须从这个点选取出数,如果有儿子就转给儿子,如果是叶子结点就移除。最后不能操作的人败,问先手第一次操作有几种方案可保证胜。

tags:题解说用SG函数,还不太会SG,后面补一下吧。。但这个题类似于阶梯博弈,也可以做,只要看奇数层就行。

#include<bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/STACK:102400000,102400000")
#define FF(i,a,b) for (int i=a;i<=b;i++)
#define F(i,b,a)  for (int i=b;i>=a;i--)
#define mes(a,b)  memset(a,b,sizeof(a))
#define INF 0x3f3f3f3f
typedef long long ll;
const int N = 2e6+10;

int b[N], a[N], t, T, k, tt;
ll s, m, sum;
int main()
{
    scanf("%d", &T);
    while(T--) {
        t=tt=1, s=sum=0; mes(b, 0);
        scanf("%d", &k);
        FF(i,1,k) for(int j=1; j<=(1<<(i-1)); j++) {
            scanf("%d", &a[t]);
            if((k-i+1)&1)  s^=a[t], b[tt++]=t ;
            t++;
        }
        if(s==0) printf("0\n");
        else {
            FF(i,1,tt-1)  {
                m=s^a[b[i]];
                if(m<a[b[i]]) {
                    if(b[i]>=(1<<(k-1))) sum++;
                    else sum+=2;
                }
                else if(a[(b[i]>>1)]>=(m-a[b[i]])) sum++;

            }
            printf("%lld\n", sum);
        }
    }

    return 0;
}

C. Red Packets

题意:n种商品,价格ai,开心值bi。有金钱k元,选取连续的多件商品,可以免费m件。问在花费k元钱内,可以获得最大开心值是多少。

tags:虽然这题目有点熟悉,但不会做。。

时间: 2024-10-13 02:13:15

玲珑杯 #9 A 质数 B 博弈 C 不会的相关文章

博弈问题-Alice与Bob拿牌游戏

Description Bob and Alice play a game, and Bob will play first. Here is the rule of the game: 1) There are N stones at first; 2) Bob and Alice take turns to remove stones. Each time, they can remove p^k stones. p is prime number, such as 2, 3, 5, ...

51nod_1831: 小C的游戏(Bash博弈 找规律)

题目链接 此类博弈不需要考虑sg函数,只需要确定必胜态和必败态,解题思路一般为打败先打表找规律,而后找规律给出统一的公式.打表方式:给定初始条件(此题中为ok[0]=ok[1]=0),然后从低到高枚举某一状态的所有次态,若有存在必败次态,则当前状态为必胜态,否则当前状态必败. 题意:对单独一堆石子,支持两种操作:1.石子数-1:2.石子数变为原来石子数的某一因数.取走走后一堆或无法操作(面对n==0,坑啊..)者为负. 先打表找下规律 1 #include<bits/stdc++.h> 2 u

ZOJ 3529 A Game Between Alice and Bob (分解质因数+Nim博弈)

A Game Between Alice and Bob Time Limit: 5 Seconds      Memory Limit: 262144 KB Alice and Bob play the following game. A series of numbers is written on the blackboard. Alice and Bob take turns choosing one of the numbers, and replace it with one of

博弈游戏汇总

1.巴什博弈 一堆石子,有n个,两个人轮流取,每次至少取1个,至多取m个,拿走最后一个石子的人获胜 假设一堆石子有  n=m+1  由于一次只能取m个,无论先手取多少个,后手总能拿走剩余的,这时一定是先手负 于是找到取胜规则: 一对石子  n=(m+1)*r+s 对于先手应该先取走s个,设后手取走k个,先手再取走  m+1-k    剩余的石子个数为  (m+1)(r-1)  以后保持这样的取法,先取者获胜 总之,就是要留给对手  m+1的倍数 可以归结为:   s=0时,后手胜 s<>0时,

石油大训练 Little Sub and Johann (博弈SG打表找规律)

Little Sub and Johann 题目描述 Little Sub and Johann are good friends and they often play games together. Recently, they like playing with stones.They have n piles of stones initially and they should make one of following movements by turns:1.Erase a pil

苹果不再“雁过拔毛”的背后:利益博弈下谁是赢家?

自从库克成为苹果大当家后,苹果似乎就一直奔着利润一股脑地扎进去了.iPhone万年不变样,就连有所改变的iPhone X在售价上也是"穷凶极恶",吃相极其难看.而在今年4月份腾讯微信官方发布通告,更是将苹果推上风口浪尖.微信官方表示,由于受苹果公司新规定影响,iOS 平台的微信客户端关闭公众号打赏功能. 至于微博问答.知乎问答.今日头条及众多直播平台等在内,都逃不过苹果的"雁过拔毛"--苹果认为应用上的打赏属于"内购"行为,去抽取30%的分成.但

C#中质数的两种算法

一.判断1到该数本身一共能被多少数整除,若只能被两个数整除,则该数为质数. int n = 0; for(int i = 1; i < = num; i++){ //遍历1-num的所有整数与num相除,得出num能被多少个数整除 if(num%i==0){ n++; } } if(n == 2){ //只能被两个数整除,则num为质数 //num是质数 } else{ //num不是质数 } 二.判断该数除1和本身,是否能被其他数整除,若不能,则该数为质数. bool s = false; f

LeetCode OJ:Count Primes(质数计数)

Count the number of prime numbers less than a non-negative number, n. 计算小于n的质数的个数,当然就要用到大名鼎鼎的筛法了,代码如下,写的有点乱不好意思. 1 class Solution { 2 public: 3 int countPrimes(int n) { 4 vector<int> vtor(n + 1, 0); 5 vector<int> ret; 6 for (int i = 0; i <=

HDU1760 A New Tetris Game【DFS】【博弈】

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1760 题目大意: 给你一个N*M的矩阵棋盘.数字0代表该位置可用,数字1代表该位置不可以.Lele和姐姐在这个 棋盘上下棋,每次在棋盘上放一个大小为2*2的正方形,棋子间不能相互叠加.两个人轮流放,每 次都按最优策略放正方形.轮到谁没有地方放置棋子了,就算谁输.若每次都是Lele先放,那么问 题来了:Lele是否一定能赢姐姐呢. 思路: 博弈中的必胜态:当前所能到达的状态能到达一个必败态,则当前状