Codeforces Round #364 (Div. 2)【A,C】

啊啊啊啊啊啊啊啊啊,目睹A->CⅠA全过,最终fstwaA,C;23333333
A题:
题意:
就是分成相等的m堆,每堆有两个位置上的值相加。
思路:
fst在sum可能不是偶数,先*2/n;。。。。。。。。。。。。。。哭死。。
code:

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
const double eps=1e-6;
const double pi=acos(-1.0);
const int mod=998244353;
const int INF=0x3f3f3f3f;

const int N=1e2+10;

int a[N];
bool vis[N];
int n;

int main()
{
    cin>>n;
    int sum=0;
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
        sum+=a[i];
    }
    memset(vis,0,sizeof(vis));
    int x=sum*2/n;
    for(int i=1;i<=n;i++){
        if(!vis[i])
        {
            printf("%d ",i);
            vis[i]=1;
            for(int j=1;j<=n;j++)
            {
                if(!vis[j]){
                    if((a[i]+a[j])==x)
                    {
                        printf("%d
",j);
                        vis[j]=1;
                        break;
                    }
                }
            }
        }
    }

}

C题:
题意就是求一个最短连续区间长度包含给定字符串的所有种类。
思路:写挫了。。。。
code:

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
const double eps=1e-6;
const double pi=acos(-1.0);
const int mod=998244353;
const int INF=0x3f3f3f3f;

const int N=1e5+10;

char s[N];
bool v1[N];
int v2[N];
int p1,p2;

int main()
{
    int len;
    scanf("%d",&len);
    scanf("%s",s);
    int sum;
    int x;
    sum=0;
    memset(v1,0,sizeof(v1));
    for(int i=0;i<len;i++){
        x=s[i];
        if(!v1[x]){
            sum++;
            v1[x]=1;
        }
    }
    memset(v2,0,sizeof(v2));
    int ans=INF;
    int num=0;
    int flag=0;
    p1=p2=0;
    num=0;
    while(1)
    {
        flag=0;
        while(num<sum){
            if(p2==len)
                break;
            x=s[p2];
            if(!v2[x])
                num++;
            v2[x]++;
            p2++;
            flag=1;
           // printf("p2=%d
",p2);
        }
        while(num==sum){
            ans=min(ans,p2-p1);
            x=s[p1];
            v2[x]--;
            if(!v2[x])
                num--;
            p1++;
            flag=1;
           // printf("p1=%d
",p1);
        }
        if(!flag)
            break;
    }
    printf("%d
",ans);
    return 0;
}
原文地址:https://www.cnblogs.com/keyboarder-zsq/p/5934412.html