1682. Crazy Professor(并查集)
加了些数论知识 先看下剩余类的概念
一个整数被正整数n除后,余数有n种情形:0,1,2,3,…,n-1,它们彼此对模n不同余。这表明,每个整数恰与这n个整数中某一个对模n同余。这样一来,按模n是否同余对整数集进行分类,可以将整数集分成n个两两不相交的子集。我们把(所有)对模n同余的整数构成的一个集合叫做模n的一个剩余类。
对于a%k=x b%k=y 若x!=y a与b有边相连 则a的剩余类 与b的剩余类l里的元素也是可以相连的 即 a ->b->a+k->b+k->a 所以有环
若x==y 则同一剩余类里元素都可以相连 a->a+k->a+2k->a 成环 且不会大于3*k
然后利用并查集就可以了 用vector存下可以与其满足对k取余为0的剩余类 枚举t t+k t+2*k时的情况 是不是形成 了环
#include <iostream>
#include<cstdio>
#include<cstring>
#include<stdlib.h>
#include<vector>
#include<algorithm>
#include<cmath>
using namespace std;
#define N 300010
#define LL long long
vector<LL>q[N];
LL f[N];
LL find(LL x)
{
if(x!=f[x])
f[x] = find(f[x]);
return f[x];
}
int main()
{
LL i,j,k;
int flag = ,g;
scanf("%lld",&k);
for(i = ; i <= k*; i++)
f[i] = i;
for(i = ; i < k ; i++)
{
LL tt = (i*i)%k;
q[i].push_back((k-tt)%k);
q[(k-tt)%k].push_back(i);
}
for(i = ; i < k ; i++)
sort(q[i].begin(),q[i].end());
for(i = ; i <= k* ; i++)
{
int io = i%k;
int tt = unique(q[io].begin(), q[io].end()) - q[io].begin();
int t;
for(j = ; j < tt ; j++)
{
t = q[io][j];
if(t<i&&t>)
{
int tx = find(i);
int ty = find(t); if(tx==ty)
{
flag = ;
break;
}
else
f[tx] = ty;
}
if(t+k<i)
{
int tx = find(i);
int ty = find(t+k);
if(tx==ty)
{
flag = ;
break;
}
else
f[tx] = ty;
}
if(t+*k<i)
{
int tx = find(i);
int ty = find(t+*k);
if(tx==ty)
{
flag = ;
break;
}
else
f[tx] = ty;
}
}
if(flag)
{
g = i;
break;
}
}
if(flag)
printf("%d\n",g);
else
printf("-1\n");
return ;
}
1682. Crazy Professor(并查集)的更多相关文章
- URAL 1682 Crazy Professor (并查集)
[题目链接] http://acm.timus.ru/problem.aspx?space=1&num=1682 [题目大意] 给出k,从1开始不断地加一并把这个数写在黑板上,如果写上的数字和 ...
- ural1682 Crazy Professor
Crazy Professor Time limit: 1.0 secondMemory limit: 64 MB Professor Nathan Mathan is crazy about mat ...
- *HDU1829 并查集
A Bug's Life Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- POJ 2492 并查集扩展(判断同性恋问题)
G - A Bug's Life Time Limit:10000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u S ...
- hdu 1829 A Bug's Life(分组并查集(偏移量))
A Bug's Life Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- hdu 1829 基础并查集,查同性恋
A Bug's Life Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) To ...
- hdu 1829 A Bug's Life(并查集)
A Bu ...
- 【POJ】2492 A bug's life ——种类并查集
A Bug's Life Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 28211 Accepted: 9177 De ...
- POJ 2492 并查集应用的扩展
A Bug's Life Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 28651 Accepted: 9331 Descri ...
随机推荐
- cocos3.10 使用cocostudio 回调特性 c++版本说明
cocos3.10 使用cocostudio 回调特性 c++版本说明 好久没捣鼓cocos2dx了,又拿起来玩玩,看着版本一次次的升级,真的好快,今天用cocos3.10版本测试下时间特性功能,跟着 ...
- php中封装的curl函数(抓取数据)
介绍一个封闭好的函数,封闭了curl函数的常用步骤,方便抓取数据. 代码如下: <?php /** * 封闭好的 curl函数 * 用途:抓取数据 * edit by www.jbxue.com ...
- Java学习笔记:语言基础
Java学习笔记:语言基础 2014-1-31 最近开始学习Java,目的倒不在于想深入的掌握Java开发,而是想了解Java的基本语法,可以阅读Java源代码,从而拓展一些知识面.同时为学习An ...
- Iso8601 日期格式
unit Iso8601Unit; interface type TIso8601 = class(TObject) public class function DateTimeFromIso8601 ...
- 1061. Dating (20)
#include <stdio.h> #include <map> #include <string.h> #include <ctype.h> usi ...
- javascript与DOM的渊源
1. JavaScript的起源 1.1 JavaScript的诞生与发展 JavaScript最初由Netscape的Brendan Eich设计, Netscape在最初将其脚本语言命名为Live ...
- fedora 安装chrome
1. 下载chrome的rpm安装包 2. 安装lsb: sudo yum install redhat-lsb.x86_64 3. rpm -i google-chrome-{xxxxx}.rp ...
- Flasback数据库(闪回数据库)
数据库闪回原理: 一旦启用了闪回数据库,修改的块映像会不时从数据库缓冲区复制到闪回缓冲区.通过新的后台恢复写入器(Recovery Writer, RVWR)将此闪回缓冲区内容刷新到磁盘和闪回日志接着 ...
- drop column与set unused
8i以前,如果需要删除表中的列,需要删除表然后重新建.现在,但我们需要删除一个列时,可以有以下两种方法: Logical Delete Physical Delete Logical Delete(逻 ...
- win 7 64位如何安装erdas 9.2
最主要的就是crack包必须包含这三个文件:erdas.exe、license.dat和lmgrd.exe 将这三个文件都复制到C盘安装目录下bin中,其余安装同win 7 32位系统