清北考前刷题day1早安
立方数(cubic)
Time Limit:1000ms Memory Limit:128MB
题目描述
LYK定义了一个数叫“立方数”,若一个数可以被写作是一个正整数的3次方,则这个数就是立方数,例如1,8,27就是最小的3个立方数。
现在给定一个数P,LYK想要知道这个数是不是立方数。
当然你有可能随机输出一些莫名其妙的东西来骗分,因此LYK有T次询问~
输入格式(cubic.in)
第一行一个数T,表示有T组数据。
接下来T行,每行一个数P。
输出格式(cubic.out)
输出T行,对于每个数如果是立方数,输出“YES”,否则输出“NO”。
输入样例
3
8
27
28
输出样例
YES
YES
NO
数据范围
对于30%的数据p<=100。
对于60%的数据p<=10^6。
对于100%的数据p<=10^18,T<=100。
#include<iostream>
#include<cstdio>
#include<cstring> #define ll long long
#define K 1000001 using namespace std;
ll T,n,x,ans,cnt; inline ll read()
{
ll x=,f=;char c=getchar();
while(c>''||c<''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
} int main()
{
// freopen("cubic.in","r",stdin);
// freopen("cubic.out","w",stdout);
T=read();
while(T--)
{
x=read();bool flag=;
for(ll i=;i<=K;i++)
{
if(x==i*i*i)
{
printf("YES\n");
flag=;break;
}
}
if(!flag){printf("NO\n");}
}
return ;
}
立方数2(cubicp)
Time Limit:1000ms Memory Limit:128MB
题目描述
LYK定义了一个数叫“立方数”,若一个数可以被写作是一个正整数的3次方,则这个数就是立方数,例如1,8,27就是最小的3个立方数。
LYK还定义了一个数叫“立方差数”,若一个数可以被写作是两个立方数的差,则这个数就是“立方差数”,例如7(8-1),26(27-1),19(27-8)都是立方差数。
现在给定一个数P,LYK想要知道这个数是不是立方差数。
当然你有可能随机输出一些莫名其妙的东西,因此LYK有T次询问~
这个问题可能太难了…… 因此LYK规定P是个质数!
输入格式(cubicp.in)
第一行一个数T,表示有T组数据。
接下来T行,每行一个数P。
输出格式(cubicp.out)
输出T行,对于每个数如果是立方差数,输出“YES”,否则输出“NO”。
输入样例
5
2
3
5
7
11
输出样例
NO
NO
NO
YES
NO
数据范围
对于30%的数据p<=100。
对于60%的数据p<=10^6。
对于100%的数据p<=10^12,T<=100。
/*X^3-Y^3=(x-y)(x^2+xy+y^2)
p是素数 ->(x-y)=1; y=x-1
x^2+x(x-1)+(x-1)^2=p 若p不是素数可以枚举p的因数d,就是枚举(x-y)。把(x-1)改为x-d。
*/
#include <iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<map>
#include<set>
#include<string>
using namespace std;
int main()
{
freopen("cubicp.in","r",stdin);
freopen("cubicp.out","w",stdout);
int t,flag;
scanf("%d",&t);
long long p;
while(t--)
{
flag=;
scanf("%I64d",&p);
for(int i=;i<=1e6+;i++)
{
if(3ll*i*i+*i+==p)
{
flag=;
break;
}
if (3ll*i*i+*i+>p) break;
}
if(flag) printf("YES\n");
else printf("NO\n");
}
return ;
}
猜数字(number)
Time Limit:1000ms Memory Limit:128MB
题目描述
LYK在玩猜数字游戏。
总共有n个互不相同的正整数,LYK每次猜一段区间的最小值。形如[li,ri]这段区间的数字的最小值一定等于xi。
我们总能构造出一种方案使得LYK满意。直到…… LYK自己猜的就是矛盾的!
例如LYK猜[1,3]的最小值是2,[1,4]的最小值是3,这显然就是矛盾的。
你需要告诉LYK,它第几次猜数字开始就已经矛盾了。
输入格式(number.in)
第一行两个数n和T,表示有n个数字,LYK猜了T次。
接下来T行,每行三个数分别表示li,ri和xi。
输出格式(number.out)
输出一个数表示第几次开始出现矛盾,如果一直没出现矛盾输出T+1。
输入样例
20 4
1 10 7
5 19 7
3 12 8
1 20 1
输出样例
3
数据范围
对于50%的数据n<=8,T<=10。
对于80%的数据n<=1000,T<=1000。
对于100%的数据1<=n,T<=1000000,1<=li<=ri<=n,1<=xi<=n(但并不保证一开始的所有数都是1~n的)。
Hint
建议使用读入优化
inline int read()
{
int
x = 0, f = 1;
char
ch = getchar();
for(;
!isdigit(ch); ch = getchar()) if(ch == '-') f = -1;
for(;
isdigit(ch); ch = getchar()) x = (x << 1) + (x << 3) + ch - '0';
return
x * f;
}
/*
二分答案 出现矛盾的时间
判定性
按xi从大到小排序后,在[l,r]内,若之前以被覆盖过,则矛盾。
要求互不相同,若[1,10]->7 [5,19]->7 则说明[5,10]->7,[1,4]和[11,19]最小值大于7;
所以可以合并xi相同的区间,区间交。
从大到小枚举xi判断是否有大于xi的区间并覆盖了这个区间。 可用线段树
查询:区间最小值是否为0
修改:区间改为1,不是修改区间的交,而是最小值为xi的区间并。
O(nlgn^2n); 正解并查集
f[i]表示以i开始最近的没被覆盖过的位置是哪个。
若[1,6]->7 则f[1]...f[6]=7 for(int i=f[1];i<=r;i=f[i+1]) f[l]是否>r */
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm> #define N 1000007 using namespace std;
int n,q,ans;
int f[N];//f[i]表示以i开始最近的没被覆盖过的位置是哪个。
struct node{
int x,y,z;
}p[N],t[N]; inline int read()
{
int x=,f=;char c=getchar();
while(c>''||c<''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
} bool cmp(node x,node y){return x.z>y.z;}
inline int find(int x){return x==f[x]?x:f[x]=find(f[x]);} inline bool check(int k)
{
int x,y,lmin,lmax,rmin,rmax;
for(int i=;i<=n;i++)f[i]=i;
for(int i=;i<=k;i++)t[i]=p[i];
sort(t+,t+k+,cmp);
lmin=lmax=t[].x;rmin=rmax=t[].y;
for(int i=;i<=k;i++)
{
if(t[i].z<t[i-].z)
{
if(find(lmax)>rmin) return ;
for(int j=find(lmin);j<=rmax;j++)
f[find(j)]=find(rmax+);
lmin=lmax=t[i].x;
rmin=rmax=t[i].y;
}
else
{
lmin=min(lmin,t[i].x);
lmax=max(lmax,t[i].x);
rmin=min(rmin,t[i].y);
rmax=max(rmax,t[i].y);
if(lmax>rmin) return ;
}
}
if(find(lmax)>rmin) return ;
return ;
} int main()
{
int x,y,mid;
n=read();q=read();
for(int i=;i<=q;i++)
p[i].x=read(),p[i].y=read(),p[i].z=read();
x=,y=q;ans=q+;
while(x<=y)
{
mid=x+y>>;
if(check(mid)) ans=mid,y=mid-;
else x=mid+;
}
printf("%d\n",ans);
return ;
}
清北考前刷题day1早安的更多相关文章
- 清北考前刷题day4早安
LI /* 没有考虑次大值有大于一个的情况 */ #include<iostream> #include<cstdio> #include<cstring> # ...
- 清北考前刷题day1下午好
水题(water) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK出了道水题. 这个水题是这样的:有两副牌,每副牌都有n张. 对于第一副牌的每张牌长和宽 ...
- 清北考前刷题day7早安
- 清北考前刷题day6早安
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #d ...
- 清北考前刷题day5早安
/* C(n,k) */ #include<iostream> #include<cstdio> #include<cstring> #define ll long ...
- 清北考前刷题day2早安
/* 做法一:按h sort一遍,对于一段区间[i,j],高度花费就是h[j]-h[i] 然后枚举区间,把区间内C排序,一个一个尽量选即可. n^3logn 标算:n^3 dp 高度排序,保证从前往后 ...
- 清北考前刷题da7下午好
三向城 /* 原图一定是一棵完全二叉树. 根节点是x,左节点是x*2,右节点是x*2+1 转化为二进制往左右走就很明显了. */ #include<iostream> #include&l ...
- 清北考前刷题day6下午好
/* 贪心 负数一定不取 枚举最高位是1 且答案取为0的 位置, 更新答案. */ #include<iostream> #include<cstdio> #include&l ...
- 清北考前刷题da5下午好
/* (4,1)*(3,1)*(2,1)的话1变成2然后一直是2 2变成1然后变成3 3变成1然后变成4 4变成1 */ #include<iostream> #include<cs ...
随机推荐
- 【转】Asp.net MVC Comet推送
原文链接:http://www.cnblogs.com/kissdodog/p/4283485.html 一.简介 在Asp.net MVC实现的Comet推送的原理很简单. 服务器端:接收到服务器发 ...
- centos7安装mysql5.7.19及配置远程连接
centos7安装mysql5.7.19及配置远程连接------https://blog.csdn.net/Lh19931122/article/details/77996213
- 《C语言程序设计(第四版)》阅读心得(三)
第八章 指针 1.一个变量的地址称为该变量的指针 一个专门用来存放另一变量的地址(即指针),称它为指针变量.指针变量的值是指针(即地址) 如上图2000是变量的指针,pointer是指针变量, 赋值 ...
- bash shell & front-end & auto publish & auto deploy
bash shell & front-end & auto publish & auto deploy $ zip -r apitool-2018-11-22.zip apit ...
- 【BZOJ4710】分特产(容斥原理,组合计数)
题意:有m种特产,第i种有a[i]个 有n个同学分特产,要求: 1.恰好分完 2.每个人至少要分到一个 求方案数模10^9+7 n,m,a[i]<=1000 思路:WYZ作业 首先考虑对于每一种 ...
- Linux下汇编语言学习笔记52 ---
这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...
- uva 1411 Ants (权值和最小的完美匹配---KM算法)
uva 1411 Ants Description Young naturalist Bill studies ants in school. His ants feed on plant-louse ...
- 大话设计模式C++实现-第8章-工厂方法模式
一.UML图 二.概念 工厂方法模式(Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法是一个类的实例化延迟到其子类. 三.包括的角色 (1)抽象工厂 (2 ...
- Linux纯Shell实现DNSPod动态域名
http://www.anrip.com/post/872 开发背景: 公司有台嵌入式拨号上网设备,内置busybox和完整wget命令(支持https协议),但没有curl.python.ruby. ...
- 打开与关闭Linux防火墙
1) 重启后生效 开启: chkconfig iptables on 关闭: chkconfig iptables off 2) 即时生效,重启后失效 开启: service iptables sta ...