BestCoder #37 Rikka with string (hdu 5205)

2024-04-09 16:08
文章标签 string 37 hdu bestcoder rikka 5205

本文主要是介绍BestCoder #37 Rikka with string (hdu 5205),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

// 这题一开始看的时候觉得就是取最右边的问号,依次从大到小枚举
// 注意没有?和?在中间的情况特判,结果wa了十一发,还是没有找到
// 错误在哪里,看了一下discuss里面的数据发现5 b??ab这组用我先开始
// 的思路是跪了的。我的会输出QwQ。。。
//
// 然后看了看大牛们的思路,发现自己所谓的最右边是错的,这题要求字典序最小
// 可以先全部把?填成a,判断是否回文,
// 如果不是回文直接输出,
// 如果是回文,那么我们可以直接把最右边的不是中间的填成b,输出就好了
// 这是第二种的做法
// 
// 还有一种就是爆搜,分情况讨论,发现爆搜的魅力是如此的强大,我要学爆搜啦
// 555,哎,就其原因,还是自己太水了,
// 今天听到大牛的一句话,没有ac不了的题目,只有懒惰的acmer
// 继续练吧。。。。// 第一次的代码是错误的,只是留着作为惊醒,望多多原谅//const int maxn = 1008;
//char s[maxn];
//int n;
char ch[maxn];
//int mark;
//int cnt;
//bool isp(char* s){
//	for (int i=0;i<n/2;i++)
//		if (s[i]!=s[n-1-i])
//			return false;
//	return true;
//}
//
//bool get(){
//	for (int i=0;i<26;i++){
//		s[mark] = i + 'a';
//		if (!isp(s)){
//			puts(s);
//			return true;
//		}
//	}
//	return false;
//}
//
//void solve(){
//	mark = -1 ;
//	for (int i=0;i<n;i++)
//		if (s[i]=='?'){
//			mark = i;
//		}
//	for (int i=0;i<n;i++)
//		if (s[i]=='?'){
//			s[i] = 'a';
//		}
//	//puts(s);
//	if (mark==-1){
//		if (isp(s))
//			puts("QwQ");
//		else
//			puts(s);
//	}
//	else {
//		if (isp(s)&&mark==n/2&&n%2!=0){
//			puts("QwQ");
//			return ;
//		}
//		bool flag = get();
//	}
//}
//
//int main() {
//    freopen("G:\\Code\\1.txt","r",stdin);
//	while(scanf("%d",&n)!=EOF){
//		scanf("%s",s);
//		solve();
//	}
//	return 0;
//}//#include <algorithm>
//#include <bitset>
//#include <cassert>
//#include <cctype>
//#include <cfloat>
//#include <climits>
//#include <cmath>
//#include <complex>
//#include <cstdio>
//#include <cstdlib>
//#include <cstring>
//#include <ctime>
//#include <deque>
//#include <functional>
//#include <iostream>
//#include <list>
//#include <map>
//#include <numeric>
//#include <queue>
//#include <set>
//#include <stack>
//#include <vector>
//#define ceil(a,b) (((a)+(b)-1)/(b))
//#define endl '\n'
//#define gcd __gcd
//#define highbit(x) (1ull<<(63-__builtin_clzll(x)))
//#define popcount __builtin_popcountll
//typedef long long ll;
//using namespace std;
//const int mod = 1000000007;
//const long double pi = acos(-1.l);
//
//template<class t> inline t lcm(const t& a, const t& b) { return a/gcd(a, b)*b; }
//template<class t> inline t lowbit(const t& x) { return x&-x; }
//template<class t> inline t maximize(t& a, const t& b) { return a=a<b?b:a; }
//template<class t> inline t minimize(t& a, const t& b) { return a=a<b?a:b; }
//
//const int maxn = 1008;
//char s[maxn];
//int n;
//
//bool isp(char* s){
//	for (int i=0;i<n/2;i++)
//		if (s[i]!=s[n-1-i])
//			return false;
//	return true;
//}
//
//
//void init(){
//	scanf("%s",s);
//}
//
//void solve(){
//	vector<int> v;
//	for (int i=0;i<n;i++)
//		if (s[i]=='?'){
//			s[i]='a';
//			v.push_back(i);
//		}
//	if (!isp(s))	puts(s);
//	else {
//		bool flag = false;
//		for (int i=v.size()-1;i>=0;i--){
//			if (!(v[i]==n/2&&(n&1)==1)){
//				s[v[i]] = 'b';
//				flag = true;
//				break;
//			}
//		}
//		if (flag)	puts(s);
//		else puts("qwq");
//	}
//}
//
//int main() {
//    freopen("g:\\code\\1.txt","r",stdin);
//	while(scanf("%d",&n)!=eof){
//		init();
//		solve();
//	}
//	return 0;
//}#include <algorithm>
#include <bitset>
#include <cassert>
#include <cctype>
#include <cfloat>
#include <climits>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <deque>
#include <functional>
#include <iostream>
#include <list>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <stack>
#include <vector>
#define ceil(a,b) (((a)+(b)-1)/(b))
#define endl '\n'
#define gcd __gcd
#define highBit(x) (1ULL<<(63-__builtin_clzll(x)))
#define popCount __builtin_popcountll
typedef long long ll;
using namespace std;
const int MOD = 1000000007;
const long double PI = acos(-1.L);template<class T> inline T lcm(const T& a, const T& b) { return a/gcd(a, b)*b; }
template<class T> inline T lowBit(const T& x) { return x&-x; }
template<class T> inline T maximize(T& a, const T& b) { return a=a<b?b:a; }
template<class T> inline T minimize(T& a, const T& b) { return a=a<b?a:b; }const int maxn = 1008;
int n;
char s[maxn];
bool isp(char* s){for (int i=0;i<n/2;i++)if (s[i]!=s[n-1-i])return false;return true;
}bool flag;void dfs(int i){if (flag==true) return ;if (i==n){if (!isp(s)){puts(s);flag = true;}return ;}if (s[i]>='a'&&s[i]<='z'){dfs(i+1);}else{for (int j=0;j<26;j++){s[i] =j + 'a';dfs(i+1);s[i] = '?';}}
}void init(){scanf("%s",s);flag = false;
}void solve(){dfs(0);if (!flag)puts("QwQ");
}int main() {freopen("g:\\code\\1.txt","r",stdin);while(scanf("%d",&n)!=EOF){init();solve();}return 0;
}

这篇关于BestCoder #37 Rikka with string (hdu 5205)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/888607

相关文章

usaco 1.3 Mixing Milk (结构体排序 qsort) and hdu 2020(sort)

到了这题学会了结构体排序 于是回去修改了 1.2 milking cows 的算法~ 结构体排序核心: 1.结构体定义 struct Milk{int price;int milks;}milk[5000]; 2.自定义的比较函数,若返回值为正,qsort 函数判定a>b ;为负,a<b;为0,a==b; int milkcmp(const void *va,c

poj 3974 and hdu 3068 最长回文串的O(n)解法(Manacher算法)

求一段字符串中的最长回文串。 因为数据量比较大,用原来的O(n^2)会爆。 小白上的O(n^2)解法代码:TLE啦~ #include<stdio.h>#include<string.h>const int Maxn = 1000000;char s[Maxn];int main(){char e[] = {"END"};while(scanf("%s", s) != EO

hdu 2093 考试排名(sscanf)

模拟题。 直接从教程里拉解析。 因为表格里的数据格式不统一。有时候有"()",有时候又没有。而它也不会给我们提示。 这种情况下,就只能它它们统一看作字符串来处理了。现在就请出我们的主角sscanf()! sscanf 语法: #include int sscanf( const char *buffer, const char *format, ... ); 函数sscanf()和

hdu 2602 and poj 3624(01背包)

01背包的模板题。 hdu2602代码: #include<stdio.h>#include<string.h>const int MaxN = 1001;int max(int a, int b){return a > b ? a : b;}int w[MaxN];int v[MaxN];int dp[MaxN];int main(){int T;int N, V;s

hdu 1754 I Hate It(线段树,单点更新,区间最值)

题意是求一个线段中的最大数。 线段树的模板题,试用了一下交大的模板。效率有点略低。 代码: #include <stdio.h>#include <string.h>#define TREE_SIZE (1 << (20))//const int TREE_SIZE = 200000 + 10;int max(int a, int b){return a > b ? a :

hdu 1166 敌兵布阵(树状数组 or 线段树)

题意是求一个线段的和,在线段上可以进行加减的修改。 树状数组的模板题。 代码: #include <stdio.h>#include <string.h>const int maxn = 50000 + 1;int c[maxn];int n;int lowbit(int x){return x & -x;}void add(int x, int num){while

hdu 3790 (单源最短路dijkstra)

题意: 每条边都有长度d 和花费p,给你起点s 终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的。 解析: 考察对dijkstra的理解。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstrin

hdu 2489 (dfs枚举 + prim)

题意: 对于一棵顶点和边都有权值的树,使用下面的等式来计算Ratio 给定一个n 个顶点的完全图及它所有顶点和边的权值,找到一个该图含有m 个顶点的子图,并且让这个子图的Ratio 值在所有m 个顶点的树中最小。 解析: 因为数据量不大,先用dfs枚举搭配出m个子节点,算出点和,然后套个prim算出边和,每次比较大小即可。 dfs没有写好,A的老泪纵横。 错在把index在d

hdu 1102 uva 10397(最小生成树prim)

hdu 1102: 题意: 给一个邻接矩阵,给一些村庄间已经修的路,问最小生成树。 解析: 把已经修的路的权值改为0,套个prim()。 注意prim 最外层循坏为n-1。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstri

hdu 1285(拓扑排序)

题意: 给各个队间的胜负关系,让排名次,名词相同按从小到大排。 解析: 拓扑排序是应用于有向无回路图(Direct Acyclic Graph,简称DAG)上的一种排序方式,对一个有向无回路图进行拓扑排序后,所有的顶点形成一个序列,对所有边(u,v),满足u 在v 的前面。该序列说明了顶点表示的事件或状态发生的整体顺序。比较经典的是在工程活动上,某些工程完成后,另一些工程才能继续,此时