1 条题解

  • 13
    @ 2025-3-5 13:09:00

    哈哈啊,这个题看起来非常像输出n/m*m就能得九十分的

    http://oi.sdshiyan.cn/p/53

    但是这道题经过稍微的修改后,是不能拿到分的。

    我们可以达表:

    int nxt[105],vis[105];
    void biao(int m) {
    	for(int n=2; n<=100; ++n) {
    		if((n-1)%(m-1))continue;
    		for(int i=1; i<=n; ++i)vis[i]=0,nxt[i]=i+1;
    		nxt[n]=1;
    		int nw=1;
    		for(int i=1; i<=(n-1)/(m-1); ++i) {
    			int nn=nw;
    			for(int j=1; j<m; ++j) {
    				vis[nxt[nw]]=1;
    				nw=nxt[nw];
    			}
    			nw=nxt[nw];
    			nxt[nn]=nw;
    		}
    		for(int i=1; i<=n; ++i) {
    			if(vis[i]==0)cerr<<n<<": "<<i<<"\n";
    		}
    	}
    }
    

    你让m=3,然后达表, 表打出来之后发现:

    3: 1

    5: 4

    7: 7

    9: 1//变成1了

    11: 4

    13: 7

    15: 10

    17: 13

    19: 16

    21: 19

    23: 22

    25: 25

    27: 1//变成1了

    29: 4

    31: 7

    33: 10

    35: 13

    37: 16//每次加3

    39: 19

    41: 22//每次加3

    . . //每次加3 . . .

    81: 1//又变成1了

    83: 4

    85: 7

    所以,你找到小于等于n的最大的m的整数次幂,然后减一减,除一除,乘一乘就行了。

    for(int i=0;; ++i) {
    	int t=Pow(m,i);
    	if(t>n)break;
    	++tot,a[i]=t;
    }
    for(int i=tot; i>=0; --i) {
    	if(n>=a[i]) {
    		cout<<(n-a[i])/(m-1)*m+1<<"\n";
    		break;
    	}
    }
    

    Pow是快速幂

    • @ 2025-3-6 8:58:02

      %%%

    • @ 2025-3-6 10:18:59

      @ | | | | ```是对的当时的出现> 那边发动机花费共计花费打个电话 col

       | col | col | col | col | col |
      | - | - | - | - | - | - |
      | content | content | content | content | content | content |
      | content | content | content | content | content | content |
      | content | content | content | content | content | content |
      | content | content | content | content | content | content | | col | col | col | col | col |
      | - | - | - | - | - | - |
      | content | content | content | content | content | content |
      | content | content | content | content | content | content |
      | content | content | content | content | content | content |
      | content | content | content | content | content | content | | col | col | col |
      | - | - | - | - |
      | content | content | content | content |
      | content | content | content | content | | col | col |
      | - | - | - |
      | content | content | content |
  • 1

信息

ID
57
时间
1000ms
内存
256MiB
难度
7
标签
(无)
递交数
47
已通过
10
上传者