这又是一个漫长的大周。于是,可亲可爱的老师,在放假的三天里给我们考了两次试。所以……Raiting是唰唰的掉啊。我掉了三儿啊。最近的考试都是四个小时六道题,题有点多,但是总是会有一道送分题。
Day1——
题目描述(简略版):判断一个数P是不是另一个正整数的三次方。是的话输出“YES”,否则输出“NO”
其实第一题挺水的,但是,但是我怎么就不会呢。
于是考试过后,听了小越越的讲解,我终于沉痛的明白,这是一道水题。
看到这道题,第一反应:wow这么简单?当然不是的喽,因为我看见了输入格式,哼哼,这是一道多组数据的题。看到多组数据,我自然而然地想到了福州的ZLD同志。总之,多组数据就是很难骗分。再然后,这道题的P还是very big 的,有10^18 (虽然后面证明它就算是10^18也不会超时)。
但是,这道题并不是所有数都是这么大,于是,我就骗了一点部分分。也就是先算出从1到106里所有的立方数,然后再输入P看它是否是106范围内的立方数。但是,我怕他超时,只循环到10000。
代码如下
#include<bits/stdc++.h>
using namespace std;
long long a[10010];
int t,p,x=0;
void hh()
{
for (int i=1;i<=10000;i++) a[++x]=i*i*i;
}
int main()
{
cin>>t;
long long s;
hh();
for (int i=1;i<=t;i++)
{
bool pp=false;
cin>>p;
for (int j=1;j<=x;j++)
if (p==a[j]) pp=true;
if (pp) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}
但是,这个只有60分(我10^4 居然拿到了10^6的分)
其实,你并不用计算出范围内的立方数。只需要在输入P以后枚举i的立方,在判断是否等于P。因为P是10^18 ,所以它的立方就是10^6 内,而T刚好是100,于是刚刚好卡着10^8,不会超时。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
long long p;
cin>>t;
for (long long i=1;i<=t;i++)
{
bool pp=true;
cin>>p;
for (long long j=1;j<=1000000;j++)
if (j*j*j==p)
{
cout<<"YES"<<endl;
pp=false;
break;
}
if (pp) cout<<"NO"<<endl;
}
return 0;
}
所以这样就可以AC了。
第二题——立方数2
所以这题也很水,只要在第一题的基础上只需要改一丢丢就可以AC的题。但是,一丢丢改在哪里也是一个问题。
题目描述:还是一个多组数据的题,需要你判断P是否能写成两个数的立方差的格式。P是一个质数。
其实,质数只能拆成两个连续正整数的立方差。
所以,只要在第一题的if 条件改动一下
所以代码如下:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
long long p;
cin>>t;
for (int i=1;i<=t;i++)
{
bool pp=true;
cin>>p;
for (long long j=1;j<=1000000;j++)
if (j*j*j-(j-1)*(j-1)*(j-1)==p)
{
cout<<"YES"<<endl;
pp=false;
}
if (pp) cout<<"NO"<<endl;
}
return 0;
}
还有3~5,没什么好讲的,因为我到现在都没有Ac。
最后,到了第六题
我们在寒假开学前就做过原题,也是考试。然后,我还是华丽丽不会做。但是,我肯定我做过。但是但是但是,我还是不会。
其实这道题真的很 very 的easy。
sum记录的是左括号的个数,如果是左括号,那么sum++,如果是右括号,则需要判断左括号是否为零,如果不是零,只需要与左括号匹配,也就是sum–。如果sum==0,那么这个右括号就需要改为左括号,因为没有左括号可以匹配了,所以ans++,同时sum++。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;
int sum=0,ans=0;
cin>>s;
for (int i=0;i<s.size();i++)
{
if (s[i]=='(') sum++;
else if(sum>0) sum--;
else
{
ans++;
sum++;
}
}
ans+=sum/2;
cout<<ans<<endl;
return 0;
}