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> # ...
随机推荐
- 【JavaScript】jQuery绑定事件
jquery中直接绑定事件:只能用在程序中一开始就存在的html代码 目标元素.click(function(){ }) jquery中间接绑定事件: 如果目标元素是js生成的,则需要间接绑定事件,用 ...
- win8电脑字体出现方格的解决方法
一般电脑出现乱码有几种可能,最常见的可能就是电脑字体的丢失,其次就是电脑字体被病毒所损坏,因此,首先我们要做的就是下载字体并进行安装. 下载 simsun.tcc点击安装,如果电脑字体依然是这种情况( ...
- C++高级 STL——模板函数、模板类
1.模板函数 // 定义 template <class T> Max(T &t1, T &t2) { return ((t1 > t2) ? t1 : t2); } ...
- python-8错误调试测试
1-错误处理 import logging try: print('try.......') r = 10/0 except ValueError as e: print('result:', e) ...
- spider_main.py
coding=UTF-8 import html_download import html_outputer import html_parser import url_maneger class S ...
- sql查询作业答案
sql查询作业答案 阅读目录 一 题目 二 答案 一 题目 1.查询所有的课程的名称以及对应的任课老师姓名 2.查询学生表中男女生各有多少人 3.查询物理成绩等于100的学生的姓名 4.查询平均成 ...
- 7.Mongodb安全性流程
1.安全性流程 2.超级管理员 为了更安全的访问mongodb,需要访问者提供用户名和密码,于是需要在mongodb中创建用户 采用了角色-用户-数据库的安全管理方式 常用系统角色如下: root:只 ...
- 云计算之路-阿里云上:愚人节被阿里云OCS愚
今天是愚人节,而我们却被阿里云OCS愚,很多地方的缓存一直不过期,造成很多页面中的数据一直不更新.这篇博文将向您分享我们这两天遇到的OCS问题. 阿里云OCS(Open Cache Service)是 ...
- 在sqlserver 中如何导出数据库表结构到excel表格中
先建空白excel--在数据库中的左侧找到该表, 选中需要导出的数据--Ctrl+C复制--打开记事本修改编码格式为Unicode-不自动换行保存--Ctrl+A--Ctrl+C,再打开excel-- ...
- 二分法求函数值的Pascal实现
用二分法求在(a,b)上单调的函数近似值 第八行的表达式可更改,第三行的kexi决定的精度,小数值计算可将第五行的extended更为real或double PROGRAM EQUANTION ( ...