Vijos-P1062-迎春舞会之交谊舞
来源:互联网 发布:西数和希捷哪个好 知乎 编辑:程序博客网 时间:2024/04/29 13:49
描述:
明显…交谊舞是两个人跳的,而且是一男一女-_-|||……
由于交谊舞之前的节目安排,所有表演者都要站成一排,这一排人的顺序满足两点。
1⃣️:对于一对舞伴,男生站在女生的左边。
2⃣️:任何一对舞伴之间,要么没有人,要么有若干对舞伴。
排得过于整齐导致那些要表演的人都没办法找到自己的舞伴,怎么办呢?
所幸的是,SDFZ的女生比男生聪明得多,他们知道自己左边有几个男生。现在就请你告诉这些女生,他们的舞伴距离她们多远(即包括那个男生,一共有多少男生夹在她们中间)。
格式
输入格式
第一行为一个数num,表示参与交谊舞的女生个数。
第二行是num行,从左到右表示这num个女生左边分别由多少个男生。
输出格式
一排n个数,行末无空格。表示n个女生与其舞伴的距离。
样例
输入:
6
4 5 6 6 6 6
输出:
1 1 1 4 5 6
当我看到这个题时,便想到了几天前写的完美匹配子串的题,几乎一模一样,(地址:http://blog.csdn.net/f_zyj/article/details/51050333),都是需要用到栈处理,只需要把括号换成人就可以了,谁知道仔细一看,还是有区别的,完美匹配子串的问题是有一串子串,要求求里面最长的完美子串,但是这道题是给了一条完美子串,求两两匹配的字符间的距离。所以这两大题虽然都是用到了栈,但是仍然稍有区别。准确说,除了使用的工具差不多,其他的区别挺大的。
这里,我想到的方法是,首先经过处理每一个女生左边男生数目的数据来进栈,(这个题我们不需要出栈)把所有的男生女生按顺序入栈,然后开始查找女生,找到女生后,就从女生的位置开始向前查找,找到的第一个男生且未被别的女生占有的男生即为舞伴,这里我们用tag表示该男生是否被女生占用。
思路比较清晰,但是这里面的栈函数要注意,很多细节问题都需要考虑,要根据自己的栈操作函数来对具体问题的边界进行处理。一开始我一直错,后来才发现是我的栈函数里面的边界和主函数中的不一致导致的。⚠️
代码C:
#include <stdio.h>#include <stdlib.h>#define MAXSIZE 200#define OK 1#define ERROR 0#define Max(a, b) ((a > b) ? (a) : (b))typedef int Status;typedef char SElemType;//栈结构typedef struct{ int top; //用于栈顶指针 SElemType data[MAXSIZE]; int tag[MAXSIZE]; //是否被女舞伴占用} SqStack;//PushStatus Push (SqStack *S, SElemType e){ if (S->top == MAXSIZE - 1) //栈满 { return ERROR; } S->top++; //栈顶指针加一 S->data[S->top] = e; //将新插入元素 S->tag[S->top] = 1; return OK;}////Pop//Status Pop (SqStack *S)//{// if (S->top == -1) //栈空// {// return ERROR;// }// S->top--;// return OK;//}int main(int argc, const char * argv[]){ int sum = 0, i, j, k = 0; int num, women[100], man[100]; SqStack *S = (SqStack*)malloc(sizeof(SqStack)); scanf("%d", &num); //合并入栈 for (i = 0; i < num; i++) { scanf("%d", &women[i]); for (; sum < women[i]; sum++) { Push(S, '('); //用(表示男舞者 } Push(S, ')'); //用)表示女舞者 }// for (i = 1; i < S->top; i++)// {// printf("%c ", S->data[i]);// }// printf("%c\n", S->data[S->top]); //查找男舞伴 for (i = 2; i <= S->top; i++) { if (S->data[i] == ')') { for (j = i - 1; j > 0; j--) { if (S->data[j] == '(' && S->tag[j]) { S->tag[j] = 0; man[k++] = (i - j + 1) / 2; break; } } } } //输出距离 for (i = 0; i < num - 1; i++) { printf("%d ", man[i]); } printf("%d\n", man[num - 1]); return 0;}
最近我总是感觉自己很盲目,不知道该做些什么,也许是我的压力不到位导致的,所以,我要继续给自己施压了,数据结构虽然看了一遍,但是没有很好的应用,导致忘了很多,所以,尽量在去北京参加蓝桥杯A组国赛前,再看一遍,细化学习一下数据结构!五月中旬,数学建模;五月底,蓝桥杯国赛;六月初,acm省赛。事情真的很多,我不能再耽搁了,但是今天忽然感觉想找个女朋友了!!!天天窝在寝室敲代码效率真的不高,经常头昏脑胀的,不是个学习的样子,需要劳逸结合了…………………….
- Vijos-P1062-迎春舞会之交谊舞
- vijos P1062 迎春舞会之交谊舞
- [Vijos]P1062 迎春舞会之交谊舞
- Vijos P1062迎春舞会之交谊舞
- 【模拟】Vijos P1062 迎春舞会之交谊舞
- vijos 1061 迎春舞会之三人组舞
- Vijos P1061 迎春舞会之三人组舞
- 迎春舞会之数字舞蹈
- 迎春舞会之三人组舞 --dp
- 洛谷1538 迎春舞会之数字舞蹈
- vijos1064迎春舞会之数字舞蹈
- P1538 迎春舞会之数字舞蹈
- 洛谷 P1538 迎春舞会之数字舞蹈
- P1538 迎春舞会之数字舞蹈
- 洛谷在线测试P1538迎春舞会之数字舞蹈
- 洛谷——1538 迎春舞会之数字舞蹈
- [BZOJ1516][VijosP1061]迎春舞会之三人组舞
- Vijos P1706 舞会
- Android之广播机制—有序广播
- Android之广播机制—本地广播
- C++ transfrom的使用
- Hbase学习二
- android学习——网络访问HttpURLConnection
- Vijos-P1062-迎春舞会之交谊舞
- 实例分析JavaScript中的事件委托和事件绑定
- 数据分布不均衡导致性能问题
- JavaScript 移动和触摸框架
- Javascript闭包(Closure)
- java script XX is not define
- Proof of Cover's Function Counting Theorem
- Android Tips--退出应用程序
- android学习——使用开源程序AsyncHttpClient访问网络