【模拟】Gym - 101190A - Abbreviation

让你把所有的“连续的仅有首字母大写的”词组用缩写表示,并且在后面用括号注明原词组。

#include<cstdio>
#include<cstring>
using namespace std;
char s[130];
bool iszimu(char c){
	return ((c>=‘A‘ && c<=‘Z‘) || (c>=‘a‘ && c<=‘z‘));
}
bool isbig(char c){
	return (c>=‘A‘ && c<=‘Z‘);
}
bool issmall(char c){
	return (c>=‘a‘ && c<=‘z‘);
}
bool check(int l,int r){
	if(r-l+1==1){
		return 0;
	}
	if(!isbig(s[l])){
		return 0;
	}
	for(int i=l+1;i<=r;++i){
		if(!issmall(s[i])){
			return 0;
		}
	}
	return 1;
}
void print(int l,int r){
	for(int i=l;i<=r;++i){
		putchar(s[i]);
	}
}
void prin2(int l,int r){
	for(int i=l;i<=r;++i){
		if(isbig(s[i])){
			putchar(s[i]);
		}
	}
	printf(" (");
	for(int i=l;i<=r;++i){
		putchar(s[i]);
	}
	putchar(‘)‘);
}
int main(){
	freopen("abbreviation.in","r",stdin);
	freopen("abbreviation.out","w",stdout);
	while(gets(s)){
		int n=strlen(s),sta,cnt=0,end=-1,Sta,End=-1;
		for(int i=0;i<n;++i){
			if((i==0 || !iszimu(s[i-1])) && iszimu(s[i])){
				sta=i;
			}
			if((i==n-1 || !iszimu(s[i+1])) && iszimu(s[i])){
				if(check(sta,i) && (cnt==0 || (end==sta-2 && s[end+1]==‘ ‘))){
					++cnt;
					if(cnt==1){
						Sta=sta;
						End=end;
					}
				}
				else if(check(sta,i)){
					if(cnt>=2){
						print(End+1,Sta-1);
						prin2(Sta,end);
					}
					else if(cnt==1){
						print(End+1,Sta-1);
						print(Sta,end);
					}
					cnt=1;
					Sta=sta;
					End=end;
				}
				else{
					if(cnt>=2){
						print(End+1,Sta-1);
						prin2(Sta,end);
					}
					else if(cnt==1){
						print(End+1,Sta-1);
						print(Sta,end);
					}
					print(end+1,i);
					cnt=0;
				}
				end=i;
			}
		}
		if(cnt>=2){
			print(End+1,Sta-1);
			prin2(Sta,end);
		}
		else if(cnt==1){
			print(End+1,Sta-1);
			print(Sta,end);
		}
		print(end+1,n-1);
		puts("");
	}
	return 0;
}
时间: 2024-08-07 23:55:51

【模拟】Gym - 101190A - Abbreviation的相关文章

【模拟】NEERC15 G Generators(2015-2016 ACM-ICPC)(Codeforces GYM 100851)

题目链接: http://codeforces.com/gym/100851 题目大意: n个序列.每个序列有4个值x,a,b,c,之后按照x=(a*x+b)%c扩展无穷项. 求每个序列各取一个数之后求和不是K的倍数的最大值. (x,a,b,c<=1000,n<=10000,K<=109) 题目思路: [模拟] 先暴力把每个序列能够获得的值都求出来.存下最大的两个%K不相等的值. 接下来先取每个序列最大的值,如果%K不为0则为答案. 否则把其中一个换成次优值.因为前面满足%K不相等所以只

【模拟】ECNA 2015 I What&#39;s on the Grille? (Codeforces GYM 100825)

题目链接: http://codeforces.com/gym/100825 题目大意: 栅栏密码.给定N(N<=10),密钥为一个N*N的矩阵,'.'代表空格可以看到,'X'代表被遮挡,还有密文字符串S,长度为N*N 每次将这个矩阵顺时针旋转90°,把矩阵中空格对应的位置按照从上到下从左到右的顺序依次填充上密文字符,求最终这个密文字符能否填满N*N的矩阵,能按顺序输出得到的答案,不能输出"invalid grille" 题目思路: [模拟] 直接模拟即可.旋转的坐标公式很好推.

【模拟】NEERC15 E Easy Problemset (2015-2016 ACM-ICPC)(Codeforces GYM 100851)

题目链接: http://codeforces.com/gym/100851 题目大意: N个人,每个人有pi个物品,每个物品价值为0~49.每次从1~n顺序选当前这个人的物品,如果这个物品的价值>=之前所有物品价值和则加上这个物品,否则这个物品舍弃不计算在内. 总共拿出K个物品,如果一个人没物品拿了那么他会拿出价值为50的物品.求最终物品价值和有多少. 题目思路: [模拟] 直接暴力枚举.判断是否超过之前的总和,如果有人拿了50则后面的人肯定都是拿50. 1 // 2 //by coolxxx

【模拟】NEERC15 A Adjustment Office (2015-2016 ACM-ICPC)(Codeforces GYM 100851)

题目链接: http://codeforces.com/gym/100851 题目大意: 一个N*N的矩阵A,Ai,j=i+j,Q次操作,每次分两种,R r取出第r行还未被取的所有数,并输出和.C c取出第c列还未被取出的所有数并输出和. 题目思路: [模拟] 首先Ai,j=i+j这个很关键.预处理每一行(=列)的值. 只要记录当前取得时候前面已经取过的所有行数的和.次数,所有列数的和.次数,就能推算出这次取数会少掉多少值. 并记录这一行或这一列被取过没有. 1 // 2 //by coolxx

Gym 100625C 密文匹配-模拟题-(map)

题意:已知n个明文和一个密文,推出可能的匹配关系,然后输出字符串ss的密文. 分析: 一个模拟题,当时想偏了,还想着要同一字母可能在任意位置,然后要记录每个字母的位置,找密文的相应位置必须是同一字母,balabala的,不知道什么鬼. 其实就是简单的对应关系,不用管位置啥的,只管同一字母对应的密文是一样的就行了.26个字母,枚举一遍就是了.对应关系匹配啥的用map是最好不过的了.小tirck是,如果已知25个字母,那么剩下的一个也就知道了. 代码: #include<iostream> #in

Codeforces Gym 100496J(模拟乱搞,线段相交)

题意:给一个M*N的矩形区域,有M*N个方格,有些方格为空(可到达),有些非空(不可达).现A和B在博弈,他们任选两个不同的空格,站在各自的格子中央,A可以移动,但只能进行一次行方向或列向方移动,移动后仍然在格子中央.A如果移动到一个位置使得B看不见他,则A获胜.B看不见A的条件是存在一个非空格子与B到A的线段相切或相交.问,对于每个空格子,A站在上面,是否无论B在哪里,他都可以移动到一个安全位置. A可以选择不移动,题目保证至少有两个空格子,每次移动只能进行横向或竖向移动,不能都进行.空格子内

Gym 100625A 间谍租车问题-简单模拟-(map的使用)

题意:输入多种车的事故赔偿价格.租车起步价.每千米单价,输入多个人的多种事件(租车.还车.发生事故),按名字字典序输出每个人的总费用,如果信息不完整或不合法输出"inconsitent"(租车.事故.还车的顺序得对,一个人同时期不能租多辆车,租车还车要完整不能只租不还或没租却还) 分析:这题就是一个简单的模拟,复杂在我不知道怎么用string做关键字,知道了map,一切都好办了.小trick:一个人可以多次租车还车. 代码: #include<iostream> #incl

20180418模拟赛T2——Gym

Gym (Gym.cpp/c/pas) 题目描述 Description 木吉终于到达了 VAN 様的老巢 gym,然而他已经是孤身一人.他决定和 VAN 様来一场对决.他决定和 VAN 様玩♂跑♂步.已知跑道长$ l \(米,而木吉一步能跑且只能跑\) n \(米,VAN様一步能跑且只能跑\) m \(米.现在规定选手不能跑出\) k \(米.而谁最后跑得远谁就赢了.出于公平起见,\)k$是一个$1 \(到\) l $之间完全随机的正整数.现在木吉想要知道,自己和 VAN 様打成平局的概率是多

Gym - 101620H_Hidden Hierarchy(树+模拟)

Hidden Hierarchy 题目链接 题目描述 You are working on the user interface for a simple text-based file explorer. One of your tasks is to build a navigation pane displaying the directory hierarchy. As usual, the filesystem consists of directories which may con