洛谷mNOIP模拟赛Day1-分组
传送门
首先是贪心的思路
从后向前选,能多选就多选,
理由:数字越少肯定越优,同时间隔尽量向前推,字典序尽量小
对于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-分组的更多相关文章
- 【洛谷mNOIP模拟赛Day1】T1 斐波那契
题目传送门:https://www.luogu.org/problemnew/show/P3938 这题出得特别吼啊~~ 通过打表或者大胆猜想斐波那契数列的一些性质,我们不难发现对于一只兔子$x$,其 ...
- 洛谷mNOIP模拟赛Day1-斐波那契
题目背景 大样例下发链接:http://pan.baidu.com/s/1c0LbQ2 密码:jigg 题目描述 小 C 养了一些很可爱的兔子. 有一天,小 C 突然发现兔子们都是严格按照伟大的数学家 ...
- 洛谷noip 模拟赛 day1 T3
T7983 大芳的逆行板载 题目背景 大芳有一个不太好的习惯:在车里养青蛙.青蛙在一个n厘米(11n毫米s)的Van♂杆子上跳来跳去.她时常盯着青蛙看,以至于突然逆行不得不开始躲交叉弹.有一天他突发奇 ...
- 洛谷mNOIP模拟赛Day2-星空
题目背景 pdf题面和大样例链接:http://pan.baidu.com/s/1cawM7c 密码:xgxv 命运偷走如果只留下结果, 时间偷走初衷只留下了苦衷. 你来过,然后你走后,只留下星空. ...
- 洛谷mNOIP模拟赛Day2-将军令
题目背景 pdf题面和大样例链接:http://pan.baidu.com/s/1cawM7c 密码:xgxv 历史/落在/赢家/之手 至少/我们/拥有/传说 谁说/败者/无法/不朽 拳头/只能/让人 ...
- 洛谷mNOIP模拟赛Day2-入阵曲
题目背景 pdf题面和大样例链接:http://pan.baidu.com/s/1cawM7c 密码:xgxv 丹青千秋酿,一醉解愁肠. 无悔少年枉,只愿壮志狂. 题目描述 小 F 很喜欢数学,但是到 ...
- 洛谷mNOIP模拟赛Day1-数颜色
传送门 题目大意: 给定一个序列,维护每个数字在[L,R]出现的次数以及交换a[x]和a[x+1]的操作 一开始想的分桶法,感觉复杂度还可以吧,常数有点大,于是死得很惨(65分) #include&l ...
- 洛谷noip 模拟赛 day1 T1
T7925 剪纸 题目描述 小芳有一张nnn*mmm的长方形纸片.每次小芳将会从这个纸片里面剪去一个最大的正方形纸片,直到全部剪完(剩下一个正方形)为止. 小芳总共能得到多少片正方形纸片? 输入输出格 ...
- 湖南国庆模拟赛day1 分组
题目大意:给你一个n个数的数列s,要对这些数进行分组,当有任意两个数在一种方案在一起而在另一种方案中不在一起算是两种不同的方案,一个组的"不和谐程度"为组内数的极差,如果只有一个人 ...
随机推荐
- Python 二分查找
(非递归实现) def binary_search(alist, item): first = 0 last = len(alist)-1 while first<=last: midpoint ...
- postcss的安装与使用
我是经过公司另外一个同事推荐的这个 他是一个资深的大哥哥 我觉得我确实需要跟多的学习和成长 而且我觉得我应该听他的话 多学学新知识 最近一直在做适配的网站 会出现很多媒体查询 我发现用这个写媒体查询 ...
- Python 简单聊天室
#coding=utf-8 from socket import * from threading import Thread import time udpSocket = socket(AF_IN ...
- javascript原型链__proto__属性的理解
在javascript中,按照惯例,构造函数始终都应该以一个大写字母开头,而非构造函数则应该以一个小写字母开头.一个方法使用new操作符创建,例如下面代码块中的Person1(可以吧Person1看做 ...
- js的构造函数共用事例
在使用构造函数去实现一种功能时,我们有时候往往需要实现这个功能,会因此产生多个堆内对象.这样就会造成堆内存滥用.占用不该占用的空间.为此我们可以利用函数把共用的内容封装起来.放便我们的使用.很多东西其 ...
- HTTP协议扫盲(六)InputStream的复用
一.问题提出 在进行网关引擎开发时,获取到一个http请求的inputstream后,可能要多次利用它进行read操作.由于流读过一次就不能再读了,所以需要实现InputStream的复制. 而Inp ...
- 云计算(2)it 是什么
2015年,全世界在it上面的花费达到3亿8千亿美金之多. 云数据中心:核心基础架构,云计算的物理载体,提供数据处理.存储和高性能计算支撑,包括服务器.存储.冷却.机房空间和能耗管理等. 超大规模的云 ...
- 面向对象的PHP(5)
OOP的好处 封装 封装可以隐藏实现细节,使代码模块化,代码重用 继承 继承可以扩展已存在的代码模块(class),代码重用 多态 为了类在继承和派生的时候,保证实例的某一属性正确调用,接口重用 关键 ...
- python CSS
CSS 一. css的四种引入方式 1.行内式 2.嵌入式 3. 链接式 将一个.css文件引入到HTML文件中 1 <link href="mystyle.css" ...
- Qt QFile文件读写
QFile 需要添加 #Include <QFile> 集成至QIODevice 打开一个文件有3种方式QIODevice::(ReadOnly/WriteOnly/ReadWrite) ...