10.26 模拟赛

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <string>

using namespace std;
const int N = 3e5 + 10;

string s;
char c[N];
int f[N][3];

int main()
{
    freopen("reverse.in","r",stdin);
    freopen("reverse.out","w",stdout);
    cin >> s;    
    int l = 1;
    int len = s.length();
    for(int i = 0; i < len; i ++)
        c[i + 1] = s[i];
    while(c[l] == '0') l ++;
    int r = len;
    while(c[r] == '1') r --;
    for(int i = 1; i <= len; i ++)
        if(c[i] == '0') f[i][1] = f[i - 1][1], f[i][0] = f[i - 1][0] + 1;
        else f[i][0] = f[i - 1][0],f[i][1] = f[i - 1][1] + 1;
    int answer = 10000009;
    int n = len;
    for(int i = 1; i <= n + 1; i ++)
        answer = min(answer, f[n][0] - f[i - 1][0] + f[i - 1][1]);
    printf("%d", answer == 10000009 ? 0 : answer);
    return 0;
}
/*
010001
0001000001110111111
11111111111111011111111111011111111111
1010100001
*/

#include<iostream>
#include<cstdio>
#include<cstring>

#define size 1024

using namespace std;
int n,cnt[size],vis[10];
int Use[10]={1,2,4,8,16,32,64,128,256,512};
long long ans;

int main()
{
    freopen("number.in","r",stdin);
    freopen("number.out","w",stdout);
    cin>>n;
    int start,End;
    for(int i=1;i<=n;i++)
    {
        start=i;End=0;memset(vis,0,sizeof vis);
        while(start) vis[start%10]=1,start/=10;
        for(int j=0;j<=9;j++) if(vis[j]) End+=Use[j];
        cnt[End]++;
    }
    for(int i=0;i<size;i++) ans+=1ll*cnt[i]*(cnt[i]-1)/2;
    cout<<ans<<endl;
    fclose(stdin);fclose(stdout);
    return 0;
}

#include <bits/stdc++.h>
using namespace std;

const int maxn = 2000008;
int n, m, a[maxn]; 

int getInt() {
    int res = 0; char c;
    do c = getchar();
    while (!isdigit(c));

    while (isdigit(c))
        res = (res << 1) + (res << 3) + c - '0', c = getchar();

    return res;
}

int main() {
    freopen("wave.in", "r", stdin);
    freopen("wave.out", "w", stdout);

    scanf("%d%d", &n, &m);
    for (int i = 0; i < n; i++)
        scanf("%d", a + i);
    int ans = 1, k = 0, cur = a[0];
    for (int i = 1; i < n; i++)
        if (k) 
            if (cur - m >= a[i])
                k = 0, cur = a[i], ans++;
            else cur = max(cur, a[i]);
        else 
            if (a[i] - m >= cur)
                k = 1, cur = a[i], ans++;
            else cur = min(cur, a[i]);
    printf("%d
", ans);

    fclose(stdin); fclose(stdout);
    return 0;
}

预计分数 A + 30 + 0

实际 A + 0 + 0

T1 可以简单进行模拟记录从1到该节点0和1的个数,枚举以每个点为中❤(左边全为0,右边全为1),记录最小值

T2打了个表,编译超时,这个错误还是第一次见,理解错题意较长时间

T3当时没时间做,不过想在看std并不是很难

原文地址:https://www.cnblogs.com/lyqlyq/p/7738606.html