zoukankan      html  css  js  c++  java
  • 1875 丢手绢 (模拟+打表)

    题意就不说了。

    不会之前,还是感觉挺难的。

    思路:n表示多少人,e表示传的长度,刚开始从1传给n+1~n+n;那么n为多少合适呢?

    先是枚举e,e是无上界限的,用一个非常大的数来表示哦。

    s表示当前的位置, s+e之后  整个圈all--;而s也要--的;(相对位置是不变的)然后再加e,求余(数学的周期一样)

    表示的新位置我们就需要判断了,符合在n+1—n+n就继续,否则枚举下一个e,如果一直跳到新的位置,并且都满足条件

    那么,当圈的大小变成n时,说明e是正确的。

    怎么样是不是很裸的模拟

    ac代码:

    #include<cstdio>
    int ans[20];
    int deal(int x)
    {
        for (int i = 1; i <= 1e7; ++i)
        {
            int all = x * 2;
            int s = 0;
            while (all > x)
            {
                s += s == 0 ? 0 : -1;
                s = (s + i) % all;
                if (s <= x&&s != 0)
                    break;
                all--;
                if (all == x)
                    return i;
            }
        }
    }
    void init()
    {
        ans[1] = 1;
        for (int i = 1; i <= 13; ++i)
            ans[i] = deal(i);
    }
    int main()
    {
        init();
        int n;
        while (scanf("%d", &n), n)  printf("%d\n", ans[n]);
    
    }
  • 相关阅读:
    HTTP
    HTTP
    Tomcat
    Tomcat
    时下流行的9种恶意软件,你都了解吗?
    MYSQL中表级锁、行级锁、页级锁介绍
    MYSQL中表级锁、行级锁、页级锁介绍
    MYSQL存储引擎笔记
    MYSQL存储引擎笔记
    Shell脚本案例:批量新增用户
  • 原文地址:https://www.cnblogs.com/ALINGMAOMAO/p/9490760.html
Copyright © 2011-2022 走看看