【HDOJ】1153 Magic Bitstrings【组合数学】

传送门:

Magic Bitstrings

思路

菜逼终究是菜逼,首先表示题目没读懂。看了别人的翻译之后,总算读懂题了。

然后公式推不出来,菜哭了。

把矩阵列出来

a[1%n], a[2%n], a[3%n], ..., a[n-1]                  (1)

a[2%n], a[4%n], a[6%n], ..., a[2(n-1)%n]       (2)

a[3%n], a[6%n], a[9%n], ..., a[3(n-1)%n]       (3)

...

比较 (1), (2)

发现:

如果 a[1%n] != a[2%n],那么 a[2%n] != a[4%n],那么 a[1%n] == a[4%n];

如果 a[1%n] == a[2%n],那么 a[2%n] == a[4%n],那么 a[1%n] == a[4%n]。

所以 a[1%n] == a[4%n]

同样的方法得到:

a[1%n] == a[9%n],

a[1%n] == a[16%n],

....

所有下标是 i 平方 mod n 都相等。

下标不是 i 平方 mod n 都相等。

为了字典顺序最小,并且避免整个数列都是同一个数(题目要求 non-constant),令 a[1%n] = a[4%n] = a[9%n] = ... = 0,其他数都是 1,这样符合题意。

My AC Code Relying Network

参考 https://blog.csdn.net/chengouxuan/article/details/6877054

/*
核心:推导+找规律
solution:令 a[1%n] = a[4%n] = a[9%n] = ... = 0,其他数都是 1
*/
#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=1e5+5;

int A[maxn];

int main()
{
    int n;
    while(scanf("%d",&n))
    {
        if(n==0)
            break;
        if(n==2)
        {
            printf("Impossible\n");
            continue;
        }
        for(int i=1;i<=n-1;i++)
        {
            A[i]=1;
        }
        //这里要用long long 10^10 会溢出
        for(long long i=1;i<=n-1;i++)
        {
            A[(i*i)%n]=0;
        }
        for(int i=1;i<=n-1;i++)
            printf("%d",A[i]);
        printf("\n");
    }
    return 0;
}

原文地址:https://www.cnblogs.com/shengwang/p/9768534.html

时间: 2024-11-06 09:24:02

【HDOJ】1153 Magic Bitstrings【组合数学】的相关文章

HDOJ 5125 magic balls DP

DP magic balls Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 561    Accepted Submission(s): 168 Problem Description The town of W has N people. Each person takes two magic balls A and B every

【HDOJ 5834】Magic boy Bi Luo with his excited tree(树型DP)

[HDOJ 5834]Magic boy Bi Luo with his excited tree(树型DP) Magic boy Bi Luo with his excited tree Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Problem Description Bi Luo is a magic boy, he also has a migic tree,

HDU 5155 Harry And Magic Box(组合数学+容斥)

Problem Description One day, Harry got a magical box. The box is made of n*m grids. There are sparking jewel in some grids. But the top and bottom of the box is locked by amazing magic, so Harry can't see the inside from the top or bottom. However, f

【HDOJ】4605 Magic Ball Game

思路1:树状数组+离线处理,对所有的w离散化处理,边dfs边使用树状数组更新左右w的情况.思路2:主席树,边bfs边建树.结点信息存储cnt,然后在线查询.树状数组. 1 /* 4605 */ 2 #include <iostream> 3 #include <sstream> 4 #include <string> 5 #include <map> 6 #include <queue> 7 #include <set> 8 #inc

HDOJ 5155 Harry And Magic Box DP

dp[i][j] 表示 长宽为i,j的矩形的可能的总数 dp[i][j+1] 可由 dp[i][j] 推过来,枚举dp[i][j]所保留的行数(1...i)即可 Harry And Magic Box Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 441    Accepted Submission(s): 209 Problem D

HDOJ 题目4648 Magic Pen 6(水题)

Magic Pen 6 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 1964    Accepted Submission(s): 682 Problem Description In HIT, many people have a magic pen. Lilu0355 has a magic pen, darkgt has a

[HDOJ 5155] Harry And Magic Box

题目链接:HDOJ - 5155 题目大意 有一个 n * m 的棋盘,已知每行每列都至少有一个棋子,求可能有多少种不同的棋子分布情况.答案对一个大素数取模. 题目分析 算法1: 使用容斥原理与递推. 首先,一个 n * m 的棋盘不考虑任何限制时,可能的分布情况为 2^(n*m) ,除去没有棋子的情况,为 2^(n*m) - 1 . 然后,因为所有的 n 行,m 列都有棋子,所以枚举 ii (1 <= ii <= i) , jj (1 <= jj <= j) .对于枚举的一组 (

【HDOJ】3183 A Magic Lamp

RMQ. 1 /* 3183 */ 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib> 5 6 #define MAXN 1005 7 8 char s[MAXN], ans[MAXN]; 9 int dp[MAXN][MAXN]; 10 int n,len,m; 11 12 int min(int x, int y) { 13 return s[x]<=s[y] ? x:y; 14 } 15

HDOJ 题目4832 Chess(DP,组合数学)

Chess Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 562    Accepted Submission(s): 218 Problem Description 小度和小良最近又迷上了下棋.棋盘一共有N行M列,我们可以把左上角的格子定为(1,1),右下角的格子定为(N,M).在他们的规则中,"王"在棋盘上的走法遵循十字