Codeforces Round #497 (Div.1)
Posted absi2011
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #497 (Div.1)相关的知识,希望对你有一定的参考价值。
比赛过程:
A是个水题,花了3分钟A了
没了,后面都没过
涨分15
==================================
A
给你n个数,你可以任意重新排列这些数
求最多有几个数能严格大于这个位置原来的数
n<=105
排序以后直接做...
B
给你三个数A,B,C
求有多少个整数的(a,b,c)使得A*B*C的立方体可以被切成若干个a*b*c的立方体
要求a<=b<=c
多测,100000组数据,1<=A,B,C<=100000
C
给你一个n,让你猜x和y
x,y都是[1,n]以内的整数
每次你猜一个x,y
对面会回答:
x小了
y小了
x大了或者y大了
不会说谎,但是有多个回答可能会随机回答
DE
没看
==================================================
C题赛后过了
用类似于二分的办法
针对了一下数据
应该是错的
每次把看到1,2就修改l
看到3就修改r,两个r都修改,直到出现一维r>l
这时候另一个r显然就是真实的范围,同时把这个r恢复到最大值(n或者上一次矛盾推导出的r)
复杂度O(log^2),会炸
我每次修改完l以后会直接把l拉到上限再做一次询问,这样做针对了下数据,过了
代码:
A
#include<set> #include<map> #include<list> #include<queue> #include<stack> #include<string> #include<time.h> #include<math.h> #include<memory> #include<vector> #include<bitset> #include<fstream> #include<stdio.h> #include<utility> #include<string.h> #include<iostream> #include<stdlib.h> #include<algorithm> using namespace std; int a[100005]; int main() { #ifdef absi2011 freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); #endif int n; scanf("%d",&n); int i; for (i=0;i<n;i++) { scanf("%d",&a[i]); } sort(a,a+n); int cnt=0; a[n]=-1; int ans=0; for (i=0;i<n;) { int j; for (j=i;a[j]==a[i];j++) { if (cnt>0) { cnt--; ans++; } } cnt+=(j-i); i=j; } printf("%d ",ans); return 0; }
C
#include<set> #include<map> #include<list> #include<queue> #include<stack> #include<string> #include<time.h> #include<math.h> #include<memory> #include<vector> #include<bitset> #include<fstream> #include<stdio.h> #include<utility> #include<string.h> #include<iostream> #include<stdlib.h> #include<algorithm> using namespace std; int query(long long x,long long y) { cout<<x<<" "<<y<<" "; fflush(stdout); int n; if (cin>>n) { return n; } else { exit(-1); } } int main() { #ifdef absi2011 //freopen("input.txt","r",stdin); //freopen("output.txt","w",stdout); #endif long long n; cin>>n; long long l1=1,l2=1,r1=n,r2=n; for (;;) { long long t_l1=l1,t_l2=l2,t_r1=r1,t_r2=r2; for (;;) { long long mid1=(l1+r1)/2; long long mid2=(l2+r2)/2; int ans=query(mid1,mid2); if (ans==0) { return 0; } else if (ans==1) { l1=mid1+1; t_l1=mid1+1; int ans=query(r1,mid2); if (ans==1) { l1=r1+1; } else if (ans==0) { return 0; } else if (ans==2) { l2=mid2+1; t_l2=mid2+1; } } else if (ans==2) { l2=mid2+1; t_l2=mid2+1; int ans=query(mid1,r2); if (ans==2) { l2=r2+1; } else if (ans==0) { return 0; } else if (ans==1) { l1=mid1+1; t_l1=mid1+1; } } else { r1=mid1-1; r2=mid2-1; } if (r1<l1) { t_r2=r2; break; } if (r2<l2) { t_r1=r1; break; } } l1=t_l1; l2=t_l2; r1=t_r1; r2=t_r2; if ((l1>r1)||(l2>r2)) return 1; /* if (l1==r1) { for (;;) { int mid=(l2+r2)/2; int ans=query(l1,mid); if (ans==0) { return 0; } else if (ans==2) { l2=mid+1; } else if (ans==3) { r2=mid-1; } } } if (l2==r2) { for (;;) { int mid=(l1+r1)/2; int ans=query(mid,l2); if (ans==0) { return 0; } else if (ans==1) { l1=mid+1; } else if (ans==3) { r1=mid-1; } } } */ } return 0; }
以上是关于Codeforces Round #497 (Div.1)的主要内容,如果未能解决你的问题,请参考以下文章
[ACM]Codeforces Round #534 (Div. 2)
codeforces 497E Subsequences Return
Codeforces Round #726 (Div. 2) B. Bad Boy(贪心)