1. 程式人生 > >2018/12/7週五集訓隊第八次測試賽補題題解

2018/12/7週五集訓隊第八次測試賽補題題解

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