立方数

(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<algorithm>
using namespace std;
struct node{
long long v;
int id;
bool ok;
}q[];
bool cmp1(node x,node y){return x.v<y.v;}
bool cmp2(node x,node y){return x.id<y.id;}
long long qread(){
long long i=;
char ch=getchar();
while(ch<''||ch>'')ch=getchar();
while(ch<=''&&ch>='')i=i*+ch-'',ch=getchar();
return i;
}
int T;
int main(){
freopen("cubic.in","r",stdin);freopen("cubic.out","w",stdout);
// freopen("Cola.txt","r",stdin);
scanf("%d",&T);
for(int i=;i<=T;i++){
q[i].v=qread();
q[i].id=i;
}
sort(q+,q+T+,cmp1);
int l=;
for(int i=;i<=;i++){
long long now=1LL*i*i*i;
if(now>q[T].v)break;
while(now==q[l].v)q[l].ok=,l++;
while(now>q[l].v)l++;
while(now==q[l].v)q[l].ok=,l++;
if(l>T)break;
}
sort(q+,q+T+,cmp2);
for(int i=;i<=T;i++){
if(q[i].ok)puts("YES");
else puts("NO");
}
fclose(stdin);fclose(stdout);
return ;
}

100分

立方数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。

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n;
struct node{
long long v;
int id;
bool ok;
}q[];
bool cmp1(node x,node y){return x.v<y.v;}
bool cmp2(node x,node y){return x.id<y.id;}
long long qread(){
long long i=;
char ch=getchar();
while(ch<''||ch>'')ch=getchar();
while(ch<=''&&ch>='')i=i*+ch-'',ch=getchar();
return i;
}
int main(){
freopen("cubicp.in","r",stdin);freopen("cubicp.out","w",stdout);
scanf("%d",&n);
for(int i=;i<=n;i++)q[i].v=qread(),q[i].id=i;
sort(q+,q+n+,cmp1);
int l=;
for(int i=;i<=;i++){
int j=i+;
long long now=1LL*i*i+1LL*i*j+1LL*j*j;
if(now>q[n].v)break;
while(now==q[l].v)q[l].ok=,l++;
while(now>q[l].v)l++;
while(now==q[l].v)q[l].ok=,l++;
if(l>n)break;
}
sort(q+,q+n+,cmp2);
for(int i=;i<=n;i++){
if(q[i].ok)puts("YES");
else puts("NO");
}
fclose(stdin);fclose(stdout);
return ;
}

100分

猜数字

(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;

}

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 1000010
#define INF 1000001
using namespace std;
int n,T,opv,opx,cnt;
bool use[maxn];
struct node{
int l,r,v;
bool operator < (const node x)const{
if(v!=x.v)return v>x.v;
if(l!=x.l)return l<x.l;
if(r!=x.r)return r<x.r;
}
}a[maxn],b[maxn],qujian[maxn];
int q[maxn];
void change(){
q[opx]=opv;
}
int find(int l,int r){
int mn=0x7fffffff;
for(int i=l;i<=r;i++)mn=min(mn,q[i]);
return mn;
}
bool flag=;
int opl,opr;
void dfs(int pos){
if(flag)return;
if(pos==cnt+){
if(find(opl,opr)<opv)return;
flag=;return;
}
for(int i=qujian[pos].l;i<=qujian[pos].r;i++){
if(q[i]<)continue;
int w=q[i];
q[i]=qujian[pos].v;
dfs(pos+);
if(flag)return;
q[i]=w;
}
}
bool check(int x){
cnt=;
memset(q,0x7f,sizeof(q));
memset(use,,sizeof(use));
for(int i=;i<=x-;i++)b[i]=a[i];
sort(b+,b+x);
int l=,r=0x7fffffff,vnow;
for(int i=;i<=x-;i++){
if(i==||b[i].v!=b[i-].v){
if(i!=){
qujian[++cnt].l=l;
qujian[cnt].r=r;
qujian[cnt].v=vnow;
}
l=,r=0x7fffffff;
}
l=max(l,b[i].l),r=min(r,b[i].r);
vnow=b[i].v;
if(l>r)return ;//不合法
}
cnt=cnt+;
qujian[cnt].l=l;
qujian[cnt].r=r;
qujian[cnt].v=vnow;
opl=a[x].l,opr=a[x].r;opv=a[x].v;
flag=;
dfs();
if(flag==)return ;
return ;
}
int int_qread(){
int i=;
char ch=getchar();
while(ch<''||ch>'')ch=getchar();
while(ch<=''&&ch>='')i=i*+ch-'',ch=getchar();
return i;
}
int main(){
// freopen("Cola.txt","r",stdin);
freopen("number.in","r",stdin);freopen("number.out","w",stdout);
n=int_qread();T=int_qread();
for(int i=;i<=T;i++){
a[i].l=int_qread();
a[i].r=int_qread();
a[i].v=int_qread();
}
int ans=T+;
for(int i=;i<=T;i++){
if(check(i)){
ans=i;
break;
}
}
printf("%d",ans);
fclose(stdin);fclose(stdout);
return ;
}

40分 暴力

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 1000010
using namespace std;
int n,q,ans;
int fa[maxn];
struct node{
int l,r,v;
}p[maxn],t[maxn];
int qread(){
int i=;
char ch=getchar();
while(ch<''||ch>'')ch=getchar();
while(ch<=''&&ch>='')i=i*+ch-'',ch=getchar();
return i;
}
bool cmp(node x,node y){return x.v>y.v;}
int find(int x){
if(x==fa[x])return x;
return fa[x]=find(fa[x]);
}
bool check(int k){
int lmn,lmx,rmn,rmx;
for(int i=;i<=n+;i++)fa[i]=i;
for(int i=;i<=k;i++)t[i]=p[i];
sort(t+,t+k+,cmp);
lmn=lmx=t[].l;
rmn=rmx=t[].r;
for(int i=;i<=k;i++){
if(t[i].v<t[i-].v){
if(find(lmx)>rmn)return ;
for(int j=find(lmn);j<=rmx;j++)
fa[find(j)]=find(rmx+);
lmn=lmx=t[i].l;
rmn=rmx=t[i].r;
}
else{
lmn=min(lmn,t[i].l);
lmx=max(lmx,t[i].l);
rmn=min(rmn,t[i].r);
rmx=max(rmx,t[i].r);
if(lmx>rmn)return ;
}
}
if(find(lmx)>rmn)return ;
return ;
}
int main(){
freopen("number.in","r",stdin);freopen("number.out","w",stdout);
int l,r,mid;
n=qread();q=qread();
for(int i=;i<=q;i++)
p[i].l=qread(),p[i].r=qread(),p[i].v=qread();
l=,r=q;ans=q+;
while(l<=r){
mid=(l+r)>>;
if(check(mid))ans=mid,r=mid-;
else l=mid+;
}
printf("%d",ans);
}

100分 并查集

预计得分100++
实际得分100++
T2有一句话忘写了,导致输出顺序错误
T3有一个无用数祖忘删了,爆了空间
这次考试太不谨慎
把不该犯的错误改过来之后是100++

小结

清北刷题冲刺 10-28 a.m的更多相关文章

  1. 清北刷题冲刺 10-30 a.m

    星空 #include<iostream> #include<cstdio> using namespace std; int n,m; int main(){ freopen ...

  2. 清北刷题冲刺 10-28 p.m

    水题(贪心) (water) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK出了道水题. 这个水题是这样的:有两副牌,每副牌都有n张. 对于第一副牌的每 ...

  3. 2017-10-4 清北刷题冲刺班p.m

    P102zhx a [问题描述]你是能看到第一题的 friends 呢.——hja两种操作:1.加入一个数.2.询问有多少个数是?的倍数.[输入格式]第一行一个整数?,代表操作数量.接下来?行,每行两 ...

  4. 2017-10-4 清北刷题冲刺班a.m

    P101zhx a [问题描述]你是能看到第一题的 friends 呢.——hjaHja 拥有一套时光穿梭技术,能把字符串以超越光速的速度传播,但是唯一的问题是可能会 GG.在传输的过程中,可能有四种 ...

  5. 2017-10-3 清北刷题冲刺班p.m

    a [问题描述]你是能看到第一题的 friends 呢.——hja给你一个只有小括号和中括号和大括号的括号序列,问该序列是否合法.[输入格式]一行一个括号序列.[输出格式]如果合法,输出 OK,否则输 ...

  6. 2017-10-3 清北刷题冲刺班a.m

    P99zhx a [问题描述]你是能看到第一题的 friends 呢.——hja怎么快速记单词呢?也许把单词分类再记单词是个不错的选择.何大爷给出了一种分单词的方法,何大爷认为两个单词是同一类的当这两 ...

  7. 2017-10-2 清北刷题冲刺班a.m

    一道图论神题 (god) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图,只 ...

  8. 2017-10-2 清北刷题冲刺班p.m

    最大值 (max) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有一本书,上面有很多有趣的OI问题.今天LYK看到了这么一道题目: 这里有一个长度为n ...

  9. 2017-10-1 清北刷题冲刺班p.m

    一道图论好题 (graph) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图 ...

随机推荐

  1. 一 Django框架介绍——用pycharm创建Django项目

    Django框架介绍 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的软件设计模式,即模型M,视图V和控制器C.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内 ...

  2. Linux-NoSQL之Redis(三)

    一.Redis数据常用操作 1.string常用操作 set key1  aminglinux get key1 set key1  aming //一个key对应一个value,多次赋值,会覆盖前面 ...

  3. BEC listen and translation exercise 42

    These were built for the workers towards the end of the eighteenth century, and they are still furni ...

  4. 常规DLL与扩展DLL区别

    1.常规DLL可以被各种程序(python,VB等)调用,扩展DLL只能被MFC程序调用.提供给外部使用的控件类只能用扩展DLL. 2.扩展DLL的入口函数是DllMain(),而常规DLL入口是继承 ...

  5. 【python2/3坑】从gensim的Word2Vec.load()的中文vector模型输出时显示unicode码

    服务器上python2.7 打印出的e[0]对应的是 unicode码 于是分别尝试了用e[0].encode('utf-8')转码 和 e[0].decode('unicode-escape')依然 ...

  6. bzoj1006神奇的国度

    OrzCDQ您太强辣 #include<iostream> #include<cstdio> #include<cstdlib> #include<algor ...

  7. A唐纳德先生和假骰子(华师网络赛)

    Time limit per test: 1.0 seconds Memory limit: 256 megabytes 在进行某些桌游,例如 UNO 或者麻将的时候,常常会需要随机决定从谁开始.骰子 ...

  8. Access中一句查询代码实现Excel数据导入导出

    摘 要:用一句查询代码,写到vba中实现Excel数据导入导出,也可把引号中的SQL语句直接放到查询分析器中执行正 文: 导入数据(导入数据时第一行必须是字段名): DoCmd.RunSQL &quo ...

  9. TreeView控件实践

    TreeView控件可以通过HierarchicalDataTemplate 和 DataTemplate来自定义. 1)HierarchicalDataTemplate用来支持HeaderedIte ...

  10. spring--设置注入VS构造注入

    1.在传统的程序设计中,调用亲自创建被调用者的实例,即由程序控制“对象之间的依赖关系”,这种方式的耦合度比较高:控制反转就是将由程序控制的“对象间的依赖关系”转交给Ioc容器来进行控制,被调用者的实例 ...