zoukankan      html  css  js  c++  java
  • vijos- P1383盗窃-黑珍珠 (python + 代码优化)

    P1383盗窃-黑珍珠

    背景

    怪盗基德 VS OIBH
    第二话

    描写叙述

    今次怪盗基德再次对阵OIBH,目标是Black Star!基德已经突破了数层封锁,到达
    了OIBH总部存放Black Star的房间门口。OIBH的人也不是等闲之辈,他们在门上
    设了password。password问题上仅仅有两个正整数n,m。

    基德已经获悉password的生成方法。现
    在要你帮他计算出password。

    生成方法是这种:
    设一个数组a[1..n](n即是上述中的n)中按递增存放了1..n这n个数。数组s是
    a的子数组(就是集合s为集合a的子集)。而数组s中随意两个数的和都不被m整
    除。s中数的数目最大值就是password!

    格式

    输入格式

    一行两个整数n,m

    输出格式

    仅仅有一个数max,即password。

    例子1

    例子输入1[复制]

    50 7

    例子输出1[复制]

    23

    限制

    每一个点1S

    提示

    1<=n,m<=10000
    非常easy哦~~

    来源

    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
    


  • 相关阅读:
    绝对值公式
    高中数学必修1 之 函数
    破解 k4n3程序(调♂教 绅(hen)士(tai) 程序猿)
    摘抄一些看雪坛友的经典语录
    代码子控件居中于父控件
    Floyd模板
    Dijkstra模板
    并查集模板
    字典树模板
    STL之queue
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/6902943.html
Copyright © 2011-2022 走看看