这次竟然没爆炸
T1立方数
给出T个数p询问是否是立方数。
直接一个二分就OK
(然后就差点忘记了long long)
while (l+1<r)
{
long long mid=(l+r)>>1;
if (hzk(mid)<x) l=mid;
else r=mid;
}
T2立方差
给出T个质数p询问是否可以表示成立方差的形式
这里先对立方差a^3-b^3进行因式分解,得到:
(a-b)(a^2+ab+b^2)
由于p是质数,所以两个因式(a-b)和(a^2+ab+b^2)其中一个为1,另一个为p
当a-b=1时
则(a^2+ab+b^2)=p
当(a^2+ab+b^2)=1时
不可能的,懒得证
所以根据a-b=1得a=b+1
由于(a^2+ab+b^2)=p
所以a或者b最多也就到p的开方小一点(不用说吧)
所以就枚举a或者b到p的开方就行
T3梦境
m个不同面值的金币,问能满足可求和1-n所有数的最小m和方案数
第一问二进制拆,懒得说
第二问DP,设三个状态,然后滚掉一维就星
T4水题
将两组都按照x值为第一关键字排序,开一个multiset各种存就星
for (int i=1;i<=n;i++)
{
while (j<=n && a[i].x>=b[j].x)
{
q.insert(b[j++].y);
}//插入multiset
if (q.empty()) continue;
multiset<int> :: iterator it=q.upper_bound(a[i].y);//找数
if (it==q.begin()) continue;
it--;
ans++;
q.erase(it);
}
T5猜数字
不会滚
T6括号
瞎搞,开一个t,有左括号就+1,有右括号就-1,如果会减出负数,说明括号不匹配,改就星,答案随便统计。
if (s[i]==')')
{
if (t>0) t--;
else
{
t++;
ans++;//并不直接是答案
}
}
else t++;