比赛地址:https://ac.nowcoder.com/acm/contest/8997
A:
按照筛素数的方法,我们可以只判断sqrt(n)里面的数是不是n的因数就可以,再加上n/i的因数,就是答案。
不过,需要特判n是完全数的情况。
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long n;
cin>>n;
long long ans=0;
for(int i=1;i<=sqrt(n);i++)
{
if(n%i==0)
{
ans+=i;
if(i!=n/i&&i!=1)
{
ans+=n/i;
}
}
}
if(ans>n)
{
cout<<"Late"<<endl;
}
else if(ans==n)
{
cout<<"Pure"<<endl;
}
else
{
cout<<"Early"<<endl;
}
return 0;
}B:
我们可以把已经知道的移动步骤放入一个vector中,当遇到"Z"且vector不为空时,就弹出末尾的元素,最后再扫一遍vector就可以了。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
string s;
cin>>s;
vector<int> a;
for(int i=0;i<s.size();i++)
{
if(s[i]!='Z')
{
a.push_back(i);
}
else if(a.size()>0)
{
a.pop_back();
}
}
int x=0,y=0;
for(int i=0;i<a.size();i++)
{
if(s[a[i]]=='W')
{
y++;
}
else if(s[a[i]]=='A')
{
x--;
}
else if(s[a[i]]=='S')
{
y--;
}
else
{
x++;
}
}
cout<<x<<" "<<y<<endl;
return 0;
}C:
贪心策略:石头和剪刀,剪刀和布,布和石头。
剩下的,尽量平局,加入答案,完成!
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
int a[4],b[4];
cin>>a[1]>>a[2]>>a[3];
cin>>b[1]>>b[2]>>b[3];
long long ans=0;
int t1,t2;
t1=a[1],t2=b[2];
ans+=min(t1,t2)*2;
a[1]-=min(t1,t2);
b[2]-=min(t1,t2);
t1=a[2],t2=b[3];
ans+=min(t1,t2)*2;
a[2]-=min(t1,t2);
b[3]-=min(t1,t2);
t1=a[3],t2=b[1];
ans+=min(t1,t2)*2;
a[3]-=min(t1,t2);
b[1]-=min(t1,t2);
int p;
p=min(a[1],b[1]);
ans+=p;
a[1]-=p;
b[1]-=p;
p=min(a[2],b[2]);
ans+=p;
a[2]-=p;
b[2]-=p;
p=min(a[3],b[3]);
ans+=p;
a[3]-=p;
b[3]-=p;
cout<<ans<<endl;
return 0;
}D:
我们先把数组从小到大排序,枚举第一个数,即(i=1......n-1),
再去判断一个区间[l,r],如果两端的数符合条件,那么中间的数一定符合条件。
可以发现r每次是不断减少或者不变的,所以可以保留上次求出的r。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,x,y;
cin>>n>>x>>y;
int a[n+1];
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
sort(a+1,a+1+n);
int l=2,r=n;
long long ans=0;
for(int i=1;i<=n;i++)
{
int f1=0,f2=0;
l=i+1;
while(l<=n)
{
if(a[i]+a[l]>=x&&a[i]+a[l]<=y)
{
f1=1;
break;
}
l++;
}
while(r>i)
{
if(a[i]+a[r]>=x&&a[i]+a[r]<=y)
{
f2=1;
break;
}
r--;
}
if(f1==1&&f2==1)
{
//cout<<l<<" "<<r<<endl;
ans+=(r-l+1);
}
else
{
break;
}
}
cout<<ans<<endl;
return 0;
}总结:这次比赛比较简单,希望接下来的NOIP有300+

京公网安备 11010502036488号