A B
这个看之前的题解即可,第七次有详细的解释
C - Minimizing the String(贪心)
这个肯定不能把字典序都来一遍比较一下,这样一定T。可以贪心的寻找第一个位置出现字符比后面大的情况即可
代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n;
cin>>n;
string a;
cin>>a;
a+='0';
for(int i=0;i<a.size();i++)
if(a[i]>a[i+1])
{
a[i]='0';
break;
}
for(int i=0;i<a.size();i++)
if(a[i]!='0')
cout<<a[i];
}
D - Divisor Subtraction (数论)
先判断是不是偶数,是偶数最小质因数就是2,那么直接除以2即可。如果是奇数减去他的最小质因数之后肯定是一个偶数,然后继续按照偶数判断,如果这个数本身就是一个质数,那么输出1即可
注意要用long long!!!
代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
long long n,f=0;
cin>>n;
if(!(n&1))
cout<<n/2;
else
{
for(long long i=2;i*i<=n;i++)
if(n%i==0)
{
n-=i;
f=1;
break;
}
if(!f)
cout<<1;
else
cout<<1+n/2;
}
}