HDU 1153 magic bitstrings(读题+)
hdu 1153 magic bitstrings
题目大意
一个质数p,现在让你求一个p-1长度的“01魔法串”。关于这个魔法串是这么定义的:
我们现在把这个串经过一段处理变成一个长宽均为p-1的矩阵,对于第i行的串,是由原来的串按每i位取得的。如果这个矩阵每行的串满足:和原来的串相等或是原来的串按位取反,我们就称这个串是魔法串。(说了一大堆如果还没看懂就去问题底下的Discuss看吧….)
题解
一开始热衷于讨论第一行和最后一行的关系…结果什么也没看出来…后来看了别人的题解,才发现自己有多蠢。
我们把前两行先写出来:
| Column1 | Column2 | … | Columnp−1 |
|---|---|---|---|
| a1.mod.p | a2.mod.p | … | ap−1 |
| a2.mod.p | a4.mod.p | … | a[2∗(p−1)].mod.p |
我们可以看到,讨论表格前两列的话 a1.mod.p 和 a2.mod.p 如果相等,那么 a2.mod.p 和 a4.mod.p 一定也相等,所以我们得到 a1.mod.p 和 a4.mod.p 相等;而如果 a1.mod.p 和 a2.mod.p 不相等的话,我们同样推出 a1.mod.p 和 a4.mod.p 相等,所以 a1.mod.p 和 a4.mod.p 一定是相等的。
同理可以得到 a1.mod.p 和 a9.mod.p 相等、 a1.mod.p 和 a16.mod.p 相等…..所以我们得出一个结论: ai2.mod.p 都是相等的,其余各项也都是相等的。
为了字典序最小,我们把所有 ai2.mod.p 置为0,其余各项置为1,除了2以外,对于所有的质数都是有解的。
把矩阵列出来
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,这样符合题意。
#include <iostream>
#include <cstring>
#include <cstdio>
#define LL long long using namespace std; LL p;
bool flag[]; int main()
{
while(scanf("%I64d",&p),p!=)
{
memset(flag,,sizeof(flag));
if (p==)
{
printf("Impossible\n");
continue;
}
for (LL i=;i<p;i++) flag[(i*i)%p]=;
for (int i=;i<p;i++) printf("%d",!flag[i]);
printf("\n");
}
return ;
}
#include <iostream>
#include <iterator>
#include <algorithm>
#include <vector> int main () {
long long p;
while ((std::cin >> p) && p) {
if (p == ) {
std::cout << "Impossible\n";
continue;
}
std::vector <int> v (p, );
for (long long i=; i<p; ++i) {
v [i * i % p] = ;
}
std::copy (v.begin() + , v.end(), std::ostream_iterator <int> (std::cout));
std::cout << "\n";
}
return ;
}
HDU 1153 magic bitstrings(读题+)的更多相关文章
- hdu 3268 09 宁波 现场 I - Columbus’s bargain 读题 最短路 难度:1
Description On the evening of 3 August 1492, Christopher Columbus departed from Palos de la Frontera ...
- 杭电ACM2076--夹角有多大(题目已修改,注意读题)
杭电ACM2076--夹角有多大(题目已修改,注意读题) http://acm.hdu.edu.cn/showproblem.php?pid=2076 思路很简单.直接贴代码.过程分析有点耗时间. / ...
- HDUOJ--2079选课时间(题目已修改,注意读题)
选课时间(题目已修改,注意读题) Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- 【托业】【全真题库】TEST01-03-阅读题
[托业][全真题库]TEST01-03-阅读题
- Codeforces 61B【怪在读题】
搞不懂为什么DFS的写法崩了,然后乱暴力,因为题意不是很懂... 主要还是读题吧(很烦 #include <bits/stdc++.h> using namespace std; type ...
- Codeforces 659B Qualifying Contest【模拟,读题】
写这道题题解的目的就是纪念一下半个小时才读懂题...英文一多读一读就溜号... 读题时还时要静下心来... 题目链接: http://codeforces.com/contest/659/proble ...
- Day1 读题解题提升
The 2014 ACM-ICPC Asia Mudanjiang Regional Contest 昨晚做了训练赛,然后读题又自闭了QAQ. Average Score ZOJ - 3819 题意: ...
- HDU 4572 Bottles Arrangement(找规律,仔细读题)
题目 //找规律,123321123321123321…发现这样排列恰好可以错开 // 其中注意题中数据范围: M是行,N是列,3 <= N < 2×M //则猜测:m,m,m-1,m-1 ...
- hdu 2079 选课时间(题目已修改,注意读题)
http://acm.hdu.edu.cn/showproblem.php?pid=2079 背包 #include <cstdio> #include <cstring> # ...
随机推荐
- Windows Server 2008 IIS 并发请求设置
更新服务器的时候,突然发现部分机器出现了错误,大致描述如下 HTTP Error 503.2 - Service Unavailable 正在超过 serverRuntime@appConcurren ...
- 如果理解&&运算符和各类数值的布尔值
&&(且运算符):表示二者都为true才为true: 短路原则:例如 : a && b; 当a为true时,程序无论如何都会走b,而不管b为true或者false ...
- python开发基础之字符编码、文件处理和函数基础
字符编码 为什么要有字符编码? 字符编码是为了让计算机能识别我们人写的字符,因为计算机只认识高低电平,也就是二进制数"0","1". 一个文件用什么编码方式存储 ...
- linux上Kettle定时执行(转换的单步执行,job的单步执行,环境变量,kettle定时功能,效率问题等)转自(http://blog.csdn.net/feng19821209/article/details/5800960)
1,Kettle跨平台使用. 例如:在AIX下(AIX是IBM商用UNIX操作系统,此处在LINUX/UNIX同样适用),运行Kettle的相关步骤如下: 1)进入到Kettle部署的路径 ...
- 3,Linux入门
操作系统的分类 Windows系列操作系统,Unix类操作系统,Linux类操作系统,Mac操作系统 提问:为什么要去学习Linux? 同学甲可能要问,超哥你介绍了这么多有关Linux的知识,但我还是 ...
- Javascript Step by Step - 02
DOM 操作 DOM是面向HTML和XML文档的API,为文档提供了结构化表示.在DOM中一切都是节点Node,文档就是由许多的Node组成的.文档里的每个节点都有属性 nodeName.nodeVa ...
- P1418 选点问题(黑白染色)
P1418 选点问题 题目描述 给出n个点,m条边,每个点能控制与其相连的所有的边,要求选出一些点,使得这些点能控制所有的边,并且点数最少.同时,任意一条边不能被两个点控制 输入输出格式 输入格式: ...
- 无法访问hadoop yarn8088端口的解决方法
1.检查是否正确的启动了resourcemanager服务 若是没有启动,请检查yarn-site-xml配置 2.若是启动了 1.检查客户机和虚拟机之间是否能够相互ping通 2.检查虚拟机防火墙是 ...
- VS Extension+NVelocity系列(二)——让VS支持 NVelocity的智能提示(上)
一.基础概念 应该庆幸的是,VS的插件是靠着MEF实现而不是MAF,这让你所做的工作减轻了许多.如果在这之前,您已经了解了MEF的原理,我想对于VS插件的编写,您应该是很容易就能理解的.看看几个VS2 ...
- 理解web缓存
web缓存是web用于临时存储各种资源的一种技术. web缓存大概分两种,一种是前端缓存,另一种是后端端缓存. 前端缓存 浏览器缓存 浏览器自带的缓存机制. 比如说浏览器后退前进的动作,一般使用浏览器 ...