标签:
怪盗基德 VS OIBH
第二话
今次怪盗基德再次对阵OIBH,目标是Black Star!基德已经突破了数层封锁,到达
了OIBH总部存放Black Star的房间门口。OIBH的人也不是等闲之辈,他们在门上
设了密码。密码问题上只有两个正整数n,m。基德已经获悉密码的生成方法。现
在要你帮他计算出密码。
生成方法是这样的:
设一个数组a[1..n](n即是上述中的n)中按递增存放了1..n这n个数。数组s是
a的子数组(就是集合s为集合a的子集)。而数组s中任意两个数的和都不被m整
除。s中数的数目最大值就是密码!
一行两个整数n,m
只有一个数max,即密码。
每个点1S
1<=n,m<=10000
很简单哦~~
From 玛维-影之歌;
感谢kaito&aoko提供测试数据
此题的要素:
将1....n对m进行取余
得到了0.....m -1
显然如果0出现过的话,0只能出现一次,
接着可以发现由于取余得到的结果的顺序是如此:0..5..m-1,0...5...m-1
所以在m/2前出现的数肯定比后面的数多,然后又因为x + y == m是不成立的
所以我们只要取m/2范围内的数就可以了
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import math n, m = map(int,raw_input().split()) L = [] F = [0] * m for i in range(1,n + 1): F[i % m] += 1 cnt = 0 for i in range(1, m / 2 + 1): cnt += F[i] if F[0]: cnt += 1 if m % 2 == 0: if F[m / 2]: cnt -= F[m / 2] - 1 print cnt
版权声明:本文为博主原创文章,未经博主允许不得转载。
vijos- P1383盗窃-黑珍珠 (python + 代码优化)
标签:
原文地址:http://blog.csdn.net/qq_18661257/article/details/47732497