codeforces 372 div2 Complete the Word 716B

大概有三次的CF没有补了,国庆后,慢慢开始

这个题目,异常之暴力,我自己都觉得代码写的不优美....但是实在只是一个暴力,随便写写就好

遍历数组,每一位枚举26个,判断问号数量或者重复数量....

#include <stdio.h>
#include <string>
#include <iostream>
#include <string.h>
using namespace std;

char s[] = "QWERTYUIOPLKJHGFDSAZXCVBNM";

int main()
{
	char s1[50006];
	scanf("%s", s1);
	int num[30];
	int len = strlen(s1);
	int flag;
	int sum = 0;
	int sum1 = 0;

	if(len < 26)
		printf("-1\n");

	else
	{
		int i, j;
		for(i = 0; i < len - 26 + 1; i++)
		{
			memset(num, 0, sizeof(num));
			flag = 0;
			 sum = 0;
			 sum1 = 0;
			for(j = i; j <= i + 25; j++)
			{
				//printf("!!!!\n");
				if(s1[j] == ‘?‘)
				{
					sum1++;
					continue;
				}

				else if(num[s1[j] - ‘A‘] == 0)
				{
					sum++;
					num[s1[j] - ‘A‘] = 1;
					continue;
				}

				else if(num[s1[j] - ‘A‘] == 1)
					break;
			}

			if(sum + sum1 == 26)
			{
				flag = 1;
				if(sum1 == 0)
					break;
				else
				{
					for(j = i; j <= i + 25; j++)
					{
						if(s1[j] == ‘?‘)
						{
							for(int k = 0; k < 26; k++)
							{
								if(num[k + ‘A‘ - ‘A‘] == 0)
								{
									s1[j] = k + ‘A‘;
									num[k + ‘A‘ - ‘A‘] = 1;
									break;
								}
							}
						}
					}
					break;
				}
			}
		}

		//printf("%d\n", sum);
		if(flag == 0)
			printf("-1\n");

		else
		{
			memset(num, 0, sizeof(num));
			for(i = 0; i < len; i++)
				if(s1[i] == ‘?‘)
				{
					for(int k = 0; k < 26; k++)
					{
						if(num[k + ‘A‘ - ‘A‘] == 0)
						{
							s1[i] = k + ‘A‘;
							num[k + ‘A‘ - ‘A‘] = 1;
							break;
						}
					}
				}
			for(i = 0; i < len; i++)
				if(s1[i] == ‘?‘)
					s1[i] = ‘A‘;
			printf("%s\n", s1);
		}
	}
}

  

时间: 2024-08-05 22:32:37

codeforces 372 div2 Complete the Word 716B的相关文章

Codeforces 583 DIV2 Robot&#39;s Task 贪心

原题链接:http://codeforces.com/problemset/problem/583/B 题意: 就..要打开一个电脑,必须至少先打开其他若干电脑,每次转向有个花费,让你设计一个序列,使得总花费最小. 题解: 就傻傻的走就好..从左走到右,再走回来,更新序列和答案就好. 代码: #include<iostream> #include<cstring> #include<algorithm> #include<cstdio> #define MA

Codeforces #180 div2 C Parity Game

// Codeforces #180 div2 C Parity Game // // 这道题的题目意思就不解释了 // // 题目有那么一点难(对于我而言),不多说啦 // // 解题思路: // // 首先如果a串和b串相等,不多说直接YES // 如果b串全是0,直接YES // 注意到a串有一个性质,1的个数不会超过本身的加1. // a有个1的上限设为x,b有个1的个数设为y,则如果x < y // 那么直接NO. // // 现在一般情况下,就是模拟啦,找到a的后缀和b的前缀一样的

Codeforces #246(div2)

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <ti

Codeforces #245(div2)

A:A. Points and Segments (easy) 题目看了n久,开始觉得尼玛这是div2的题目么,题目还标明了easy.. 意思是给你一n个点,m个区间,在n个点上放蓝球或者红球,然后让你找一种选择方案使得m个区间内的蓝球和红球数量之差不超过1. 开始想过用dfs,不过这只是div2的A题而已.. 然后想了下,直接输出010101序列不就可以么. 交了一发,发现要先排个序,再输出就可以了. AC代码: #include<iostream> #include<cstdio&g

codeforces#327 div2

codeforces#327 div2 这场状态不好有点可惜,题目都不难,而且很好.. A题:水题. #include<bits/stdc++.h> #define REP(i,a,b) for(int i=a;i<=b;i++) #define MS0(a) memset(a,0,sizeof(a)) #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 using namespace std; typedef lo

codeforces#FF(div2) DZY Loves Sequences

n个数,可以任意改变其中一个数,求最长的上升子区间长度 思路:记录一个from[i]表示从位置i的数开始最长的上升区间长度 记录一个to[i]表示到位置i的数所能达到的最长上升区间长度 枚举要改变的数的位置i,此时能达到的长度为to[i - 1] + from[i + 1] + 1,取最大值 //#pragma comment(linker, "/STACK:102400000,102400000") //HEAD #include <cstdio> #include &l

Codeforces 258 Div2

A题,n*m根木棍,相交放置,轮流取走相交的两根,最后谁不能行动,则输掉. min(n,m)&1 为1则先取者赢. B题,给定一个长度为n,且各不相同的数组,问能否通过交换连续一段L....R使得变成单调递增. 如果一开始就是递增的,那么直接输出L...R就是1 1,交换一个就行了:否则判断中间是否有且一段单调递减,且两端交换后使得数组递增. 代码: 1 //Template updates date: 20140718 2 #include <iostream> 3 #include

Complete the Word CodeForces - 716B

ZS the Coder loves to read the dictionary. He thinks that a word is nice if there exists asubstring (contiguous segment of letters) of it of length 26 where each letter of English alphabet appears exactly once. In particular, if the string has length

CodeForces 716B Complete the Word

留坑! 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=50000+2; 4 char ca[N]; 5 int main() 6 { 7 int i,j; 8 9 while(scanf("%s",ca)!=EOF) 10 { 11 12 if(strlen(ca)<26) 13 { 14 printf("-1\n"); 15 continue; 16 } 17 int