2018/12/7周五集训队第八次测试赛补题题解

时间:2021-07-24 00:20:44

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;
  }
}