2021寒假训练(八)

题号 A B C D E F G
AC        

 

 

 

C.Convert to Ones

#include <string.h>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <deque>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <iterator>
#include <list>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <stdexcept>
#include <string>
#include <vector>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define ll long long
#define int long long
const int maxn = 3e5 + 10;
const int inf = 0x3f3f3f3f;
const int Base = 131;
const ll INF = 1ll << 62;
const double PI = acos(-1);
const double eps = 1e-7;
const int mod = 1e9 + 7;
#define PI acos(-1)
#define mem(a, b) memset(a, b, sizeof(a))
#define speed { ios::sync_with_stdio(false); cin.tie(0);cout.tie(0);}

// inline int gcd(int a, int b) {
//     while (b ^= a ^= b ^= a %= b);
//     return a;
// }

inline ll gcd(ll a, ll b) { return b == 0 ? a : gcd(b, a % b); }

long long fastPower(long long base, long long power)
{
    long long result = 1;
    while (power > 0)
    {
        if (power & 1)
            result = result * base % mod;
        power >>= 1;
        base = (base * base) % mod;
    }
    return result;
}

inline ll rd()
{
    ll s = 0, w = 1;
    char ch = getchar();
    while (ch < '0' || ch > '9')
    {
        if (ch == '-')
            w = -1;
        ch = getchar();
    }
    while (ch >= '0' && ch <= '9')
        s = s * 10 + ch - '0', ch = getchar();
    return s * w;
}

signed main(){
    int n, x, y;
    char s[maxn];
    n = rd();
    x = rd();
    y = rd();
    scanf("%s",s);
    int cnt0 = 0, cnt1 = 0, f = -1;
    for(int i = 0; i < n; i++){
        if(s[i] == '0'){
            if(f == 1 || f == -1)cnt0++;
            f = 0;
        }else{
            if(f == 0 || f == -1)cnt1++;
            f = 1;
        }
    }
    if(cnt0 != 0){
        int res1 = cnt0 * y;
        int res2 = (cnt0 - 1) * x + y;
        printf("%lld\n",min(res1, res2));
    }else{
        printf("0\n");
    }
    //system("pause");
    return 0;
}
View Code

D.Reorder the Array

#include <string.h>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <deque>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <iterator>
#include <list>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <stdexcept>
#include <string>
#include <vector>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define ll long long
#define int long long
const int maxn = 1e5 + 10;
const int inf = 0x3f3f3f3f;
const int Base = 131;
const ll INF = 1ll << 62;
const double PI = acos(-1);
const double eps = 1e-7;
const int mod = 1e9 + 7;
#define PI acos(-1)
#define mem(a, b) memset(a, b, sizeof(a))
#define speed { ios::sync_with_stdio(false); cin.tie(0);cout.tie(0);}

// inline int gcd(int a, int b) {
//     while (b ^= a ^= b ^= a %= b);
//     return a;
// }

inline ll gcd(ll a, ll b) { return b == 0 ? a : gcd(b, a % b); }

long long fastPower(long long base, long long power)
{
    long long result = 1;
    while (power > 0)
    {
        if (power & 1)
            result = result * base % mod;
        power >>= 1;
        base = (base * base) % mod;
    }
    return result;
}

inline ll rd()
{
    ll s = 0, w = 1;
    char ch = getchar();
    while (ch < '0' || ch > '9')
    {
        if (ch == '-')
            w = -1;
        ch = getchar();
    }
    while (ch >= '0' && ch <= '9')
        s = s * 10 + ch - '0', ch = getchar();
    return s * w;
}

int a[maxn], vis[maxn] = {0};

signed main(){
    int n = rd();
    for(int i = 0; i < n; i++)a[i] = rd();
    sort(a, a + n, greater<int>());
    int p1 = 0, p2 = 0, res = 0;
    while(p1 < n && p2 < n){
        if(p1 <= p2 && a[p1] > a[p2]){
            res++;
            vis[p1] = 1;
            vis[p2] = 1;
            p1++;
            p2++;
        }else{
            p2++;
        }
    }
    printf("%lld\n",res);
    //system("pause");
    return 0;
}
View Code

E.Enlarge GCD

#include <string.h>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <deque>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <iterator>
#include <list>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <stdexcept>
#include <string>
#include <vector>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define ll long long
// #define int long long
const int maxn = 3e5 + 10;
const int inf = 0x3f3f3f3f;
const int Base = 131;
const ll INF = 1ll << 62;
const double PI = acos(-1);
const double eps = 1e-7;
const int mod = 1e9 + 7;
#define PI acos(-1)
#define mem(a, b) memset(a, b, sizeof(a))
#define speed { ios::sync_with_stdio(false); cin.tie(0);cout.tie(0);}

// inline int gcd(int a, int b) {
//     while (b ^= a ^= b ^= a %= b);
//     return a;
// }

inline ll gcd(ll a, ll b) { return b == 0 ? a : gcd(b, a % b); }

long long fastPower(long long base, long long power)
{
    long long result = 1;
    while (power > 0)
    {
        if (power & 1)
            result = result * base % mod;
        power >>= 1;
        base = (base * base) % mod;
    }
    return result;
}

inline ll rd()
{
    ll s = 0, w = 1;
    char ch = getchar();
    while (ch < '0' || ch > '9')
    {
        if (ch == '-')
            w = -1;
        ch = getchar();
    }
    while (ch >= '0' && ch <= '9')
        s = s * 10 + ch - '0', ch = getchar();
    return s * w;
}

const int MAX = 15000010;
int a[maxn];
int vis[MAX], prime[MAX], mp[MAX] = {0};
int Euler_prime(int n) {
    int cnt=1;
    memset(vis,false,sizeof vis);
    for(int i=2; i<=n; i++) {
        if(!vis[i]) {
            prime[cnt++]=i;
            vis[i]=true;
        }
        for(int j=1; j<cnt; j++) {
            if(i*prime[j]>n)break;
            vis[i*prime[j]]=true;
            if(i%prime[j]==0)break;
        }
    }
    return cnt;
}

int main(){
    int n;
    int p = Euler_prime(MAX);
    scanf("%d",&n);
    scanf("%d",&a[0]);
    int _gcd = a[0];
    for(int i = 1; i < n; i++){
        scanf("%d",&a[i]);
        _gcd = gcd(_gcd, a[i]);
    }
    for(int i = 0; i < n; i++){
        a[i] /= _gcd;
        for(int j = 1; prime[j] * prime[j] <= a[i]; j++){
            if(a[i] % prime[j] == 0){
                mp[prime[j]]++;
                while(a[i] % prime[j] == 0)a[i] /= prime[j];
            }
        }
        mp[a[i]]++;
    }

    // for(int i = 0; i < 5; i++)printf("%d%c",mp[i]," \n"[i == 4]);

    int res = -1;
    for(int i = 2; i < MAX; i++){
        if(mp[i] > res)res = mp[i];
    }
    if(res != 0)printf("%d\n",n - res);
    else printf("-1\n");

    //system("pause");
    return 0;
}
View Code

 

posted @ 2021-01-28 22:31  濡苏  阅读(53)  评论(0)    收藏  举报