CF Round #550 (Div. 3) (A、B)

A题链接:

http://codeforces.com/contest/1144/problem/A

题意:

给n个字符串,问如果字符串的每一种字符都只出现一次,且出现的字符在字典序必须,即"fced"是符合要求的,“bad"是不合要求的,如果字符串中仅有一个字符也是符合要求的,符合要求输出"Yes”,否则输出"No";

分析:

水题

代码:

#include<bits/stdc++.h>
using namespace std;
constexpr int maxn = 120;
char s[maxn];
int main(){
	int n;
	scanf("%d", &n);
	while(n --){
		set<int> si;
		scanf("%s", s);
		for(int i = 0; s[i]; i += 1) si.insert(s[i]);
		if(*si.rbegin() - *si.begin() + 1 == strlen(s)
			&& si.size() == strlen(s)) puts("Yes");
		else puts("No");
	}
} 

B题链接:

http://codeforces.com/contest/1144/problem/B

题意:

给定n个数,对数组进行删除操作,即删除某个元素,但是删除操作必须以“奇偶奇偶奇偶…”的或者“偶奇偶奇偶奇…”的方式进行,问当不能进行删除操作的时候,所剩下的数的可能的最小值;

分析:

水题

代码:

#include<algorithm>
#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<vector>
#include<queue>
#include<stack>
#include<cmath>
#include<set>
#include<map>
using namespace std;

const int inf=0x7f7f7f7f;
const int maxn=1e1+50;
const int N=4e5+50;
typedef long long ll;
typedef struct{
    ll u,v,next,w;
}Edge;
Edge e[N];
typedef struct{
    int out,pos;
}Point;
Point p[N];
int cnt,head[N];

inline void add(int u,int v){
    e[cnt].u=u;
    e[cnt].v=v;
    //e[cnt].w=w;
    // e[cnt].f=f;
    e[cnt].next=head[u];
    head[u]=cnt++;
    e[cnt].u=v;
    e[cnt].v=u;
    // e[cnt].w=0;
    // e[cnt].f=-f;
    e[cnt].next=head[v];
    head[v]=cnt++;
}
inline void write(int x)
{
     if(x<0) 
        putchar('-'),x=-x;
     if(x>9)
        write(x/10);
     putchar(x%10+'0');
}
inline int read()
{
    int x = 0;
    int f = 1;
    char c = getchar();
    while (c<'0' || c>'9'){    
        if (c == '-')
            f = -1;
        c = getchar();
    }
    while (c >= '0'&&c <= '9'){
        x = x * 10 + c - '0';
        c = getchar();
    }
    return x*f;
}

int n,a[2200],b[2200],odd,even;
string s;
int main() {
    cin>>n;
    int x;
    for(int i=1;i<=n;i++){
        cin>>x;
        if(x%2!=0){
            a[odd++]=x;
        }
        else b[even++]=x;
    }
    if(odd==even||odd==even+1||even==odd+1){
        cout<<0<<endl;
        return 0;
    }
    int ans=0;
    if(odd>even){
        sort(a,a+odd);
        for(int i=0;i<odd-even-1;i++){
            ans+=a[i];
        }
    }
    else if(odd<even){
        sort(b,b+even);
        for(int i=0;i<even-odd-1;i++){
            ans+=b[i];
        }
    }
    cout<<ans<<endl;
    return 0;
}

(仅供个人理解)

上一篇:第七周作业


下一篇:摩尔质量的计算