传送门


首先是贪心的思路

从后向前选,能多选就多选,

理由:数字越少肯定越优,同时间隔尽量向前推,字典序尽量小

对于K==1,枚举1~512直接判断

对于K==2,需要用镜像并查集,来刻画“敌对关系”,如果a和b产生矛盾,就把a和b的镜像(b')连接 ,b和a'连接,然后判断自己是不是和自己的镜像连接了

打上时间戳避免清零卡常

 #include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<vector>
#define MAXN 131100
using namespace std;
int n,K;
namespace solve1
{
int read(){
int x=;char ch=getchar();
while(ch<''||ch>''){ch=getchar();}
while(ch>=''&&ch<=''){x=x*+(ch^);ch=getchar();}
return x;
}
int n,K,cnt;
int a[MAXN];
int b[MAXN<<];
int p[];
vector<int> v;
int check(int x){
for(int i=;i>=;i--){
if(p[i]-x<=){
return ;
}
if(b[p[i]-x]&&b[p[i]-x]==cnt){
return ;
}
}
return ;
}
void solve(){
n=::n,K=::K;
cnt=;
for(int i=;i<=;i++){
p[i]=i*i;
}
for(int i=;i<=n;i++){
a[i]=read();
}
for(int i=n;i>=;i--){
if(check(a[i])){
b[a[i]]=cnt;
}
else{
cnt++;
b[a[i]]=cnt;
v.push_back(i);
}
}
printf("%d\n",cnt);
for(int i=v.size()-;i>=;i--){
printf("%d ",v[i]);
}
}
}
namespace solve2
{
int read(){
int x=;char ch=getchar();
while(ch<''||ch>''){ch=getchar();}
while(ch>=''&&ch<=''){x=x*+(ch^);ch=getchar();}
return x;
}
int f[MAXN<<];
vector<int> v[MAXN<<];
int vis[MAXN<<];
int p[];
int a[MAXN];
int n,K;
int cnt;
vector<int> ans;
int find(int x){
return (f[x]==x?x:f[x]=find(f[x]));
}
void lik(int x,int y){
x=find(x),y=find(y);
if(x!=y){
f[x]=y;
}
}
bool same(int x,int y){
return (find(x)==find(y));
}
int check(int x){
for(int i=;i>=;i--){
if(p[i]-a[x]<=){
return ;
}
else if(vis[p[i]-a[x]]&&vis[p[i]-a[x]]==cnt){
for(int j=;j<v[p[i]-a[x]].size();j++){
int t=v[p[i]-a[x]][j];
if(same(x,t)){
return ;
}
lik(x,t+n);
lik(x+n,t);
}
}
}
return ;
}
void solve(){
n=::n,K=::K;
cnt=;
for(int i=;i<=;i++){
p[i]=i*i;
}
for(int i=;i<=(n<<);i++){
f[i]=i;
}
for(int i=;i<=n;i++){
a[i]=read();
}
for(int i=n;i>=;i--){
if(check(i)){
if(vis[a[i]]!=cnt){
vis[a[i]]=cnt;
v[a[i]].clear();
}
v[a[i]].push_back(i);
}
else{
cnt++;
vis[a[i]]=cnt;
v[a[i]].clear();
v[a[i]].push_back(i);
ans.push_back(i);
}
}
printf("%d\n",cnt);
for(int i=ans.size()-;i>=;i--){
printf("%d ",ans[i]);
}
}
}
int main()
{
// freopen("data.in","r",stdin);
// freopen("a.out","w",stdout);
scanf("%d%d",&n,&K);
if(==K){
solve1::solve();
}
else{
solve2::solve();
}
return ;
}

洛谷mNOIP模拟赛Day1-分组的更多相关文章

  1. 【洛谷mNOIP模拟赛Day1】T1 斐波那契

    题目传送门:https://www.luogu.org/problemnew/show/P3938 这题出得特别吼啊~~ 通过打表或者大胆猜想斐波那契数列的一些性质,我们不难发现对于一只兔子$x$,其 ...

  2. 洛谷mNOIP模拟赛Day1-斐波那契

    题目背景 大样例下发链接:http://pan.baidu.com/s/1c0LbQ2 密码:jigg 题目描述 小 C 养了一些很可爱的兔子. 有一天,小 C 突然发现兔子们都是严格按照伟大的数学家 ...

  3. 洛谷noip 模拟赛 day1 T3

    T7983 大芳的逆行板载 题目背景 大芳有一个不太好的习惯:在车里养青蛙.青蛙在一个n厘米(11n毫米s)的Van♂杆子上跳来跳去.她时常盯着青蛙看,以至于突然逆行不得不开始躲交叉弹.有一天他突发奇 ...

  4. 洛谷mNOIP模拟赛Day2-星空

    题目背景 pdf题面和大样例链接:http://pan.baidu.com/s/1cawM7c 密码:xgxv 命运偷走如果只留下结果, 时间偷走初衷只留下了苦衷. 你来过,然后你走后,只留下星空. ...

  5. 洛谷mNOIP模拟赛Day2-将军令

    题目背景 pdf题面和大样例链接:http://pan.baidu.com/s/1cawM7c 密码:xgxv 历史/落在/赢家/之手 至少/我们/拥有/传说 谁说/败者/无法/不朽 拳头/只能/让人 ...

  6. 洛谷mNOIP模拟赛Day2-入阵曲

    题目背景 pdf题面和大样例链接:http://pan.baidu.com/s/1cawM7c 密码:xgxv 丹青千秋酿,一醉解愁肠. 无悔少年枉,只愿壮志狂. 题目描述 小 F 很喜欢数学,但是到 ...

  7. 洛谷mNOIP模拟赛Day1-数颜色

    传送门 题目大意: 给定一个序列,维护每个数字在[L,R]出现的次数以及交换a[x]和a[x+1]的操作 一开始想的分桶法,感觉复杂度还可以吧,常数有点大,于是死得很惨(65分) #include&l ...

  8. 洛谷noip 模拟赛 day1 T1

    T7925 剪纸 题目描述 小芳有一张nnn*mmm的长方形纸片.每次小芳将会从这个纸片里面剪去一个最大的正方形纸片,直到全部剪完(剩下一个正方形)为止. 小芳总共能得到多少片正方形纸片? 输入输出格 ...

  9. 湖南国庆模拟赛day1 分组

    题目大意:给你一个n个数的数列s,要对这些数进行分组,当有任意两个数在一种方案在一起而在另一种方案中不在一起算是两种不同的方案,一个组的"不和谐程度"为组内数的极差,如果只有一个人 ...

随机推荐

  1. Scrum 冲刺 第三日

    Scrum 冲刺 第三日 目录 要求 项目链接 燃尽图 问题 今日任务 明日计划 成员贡献量 要求 各个成员今日完成的任务(如果完成的任务为开发或测试任务,需给出对应的Github代码签入记录截图:如 ...

  2. Codeforces 193 D. Two Segments

    http://codeforces.com/contest/193/problem/D 题意: 给一个1~n的排列,在这个排列中选出两段区间,求使选出的元素排序后构成公差为1的等差数列的方案数. 换个 ...

  3. JAVA_SE基础——14.循环结构语句

    建议有些基础的同学阅读,0基础可能会有些困难(最好看正文配合基础课本的例子) 所谓循环语句主要就是在满足条件的情况下反复执行某一个操作.Java提供了3种常用的循环语句,分别为for循环语句.whil ...

  4. java实现图片压缩

    java实现图片压缩 package Test; import java.awt.Image; import java.awt.image.BufferedImage; import java.io. ...

  5. LeetCode & Q26-Remove Duplicates from Sorted Array-Easy

    Descriptions: Given a sorted array, remove the duplicates in place such that each element appear onl ...

  6. 你考虑清楚了吗就决定用 Bootstrap ?

    近年来,在前端项目中, Bootstrap 已经成为了一个非常受欢迎的工具. Bootstrap 的确有很多优点,然而,如果你的团队中恰好有一个专职的前端工程师.那我推荐你们不要使用 Bootstra ...

  7. Docker学习笔记 - Docker容器之间的连接

    学习目标: 容器之间可以相互连接访问:: --link redis:redisAlias 准备工作 FROM ubuntu:14.04 RUN apt-get install -y ping RUN  ...

  8. SQL Server 2012 管理新特性:AlwaysOn 可用性组

    SQL Server 2012 新特性(一)管理新特性:AlwaysOn 一.准备环境 1.准备4台计算机 域控制器DC1,IP地址192.168.1.1 主节点SQL1:IP地址192.168.1. ...

  9. Django form表单

    Form介绍 之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来.与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入, ...

  10. Django--ORM基本操作

    一.字段 AutoField(Field) - int自增列,必须填入参数 primary_key=True BigAutoField(AutoField) - bigint自增列,必须填入参数 pr ...