【集训day2】STL(2/5)

day2 STL作业

A:
给定一个由一些单词组成的词汇集,要求找出其中的ananagram,即不能通过改变单词中字母顺序来变成词汇集中其他单词的单词。
PS:仅由一个字母构成的单词必是ananagram。

思路是用map,将每个单词都映射到构成它的字母串
为了保证字母串可比较相同/不相同,都进行标准化
1.全部转换为小写字母
2.按字典序排列

//不太能熟练运用的知识点

//字符串中提取单词
while(cin>>s){
	words.push_back(s);
}
//words是string类型的vector
//vector常用操作

//加入新元素
words.push_back(s);

//获取vector大小
words.size();

//用sort对vector内元素排序
sort(words.begin(),words.end());
#include<iostream>
#include<sstream>
#include<string>
#include<vector>
#include<map> 
#include<algorithm>
using namespace std;
map<string,int> cnt;
vector<string> words;

string solve(const string& s)
{
	string s1=s;
	for(int i=0;i<s1.length();i++)
		s1[i]=tolower(s1[i]);//统一为小写
	sort(s1.begin(),s1.end());//按字典序排序
	return s1; 
}

int main()
{
	string s;
	while(cin>>s){
		if(s=="#") break;
		words.push_back(s);
		string r = solve(s);//将每个单词进行标准化处理
		//printf("%d\n",cnt[r]);
		cnt[r]++;
		//printf("%d\n",cnt[r]);
		//cout<<r<<endl;
	}
	vector<string> ananagram;
	for(int i=0;i<words.size();i++)
		if(cnt[solve(words[i])]==1) 	
			ananagram.push_back(words[i]);
		// 将文本中每个单词处理成字母串后,找到对应的值
		// 如果是1,说明没有别的单词与它具有相同字母串 
	sort(ananagram.begin(),ananagram.end());
	//按字典序排序 
	for(int i=0;i<ananagram.size();i++)
		cout <<ananagram[i]<<endl;
	return 0; 
 } 

C:
有t个队伍要排队,如果新来的人所属的队伍中有队员在排队,则插入到他所属队伍的末尾,如果没有,则插入到整个队列的末尾。要求:对于每一个DEQUEUE命令,整个队列的队首出队,输出出队人的编号

两个月前做过的团体队列……毫无疑问忘得一干二净了
中间还出了个小差错,把

q2[team[number]].push(number);

这一行给删掉了,因为误以为在上一行里把队伍编号加到队列里就万事大吉……但是还没把人给搞进去呢
然后呢team[队员编号]在查看变量的时候是显示不出来的……我还以为是输入的问题,没输进去……

#include<stdio.h>
#include<algorithm>
#include<queue>
#include<map>

using namespace std;

int main()
{
	int t;//每个样例中队伍的数量 
	int kase=0;
	while(scanf("%d",&t)==1&&t!=0){
		queue<int>q1;//储存队伍编号 
		queue<int>q2[1010];//储存队伍中每个队员的编号
		//因为总共有1000支队伍,所以应该创建一个队列数组 
		map<int,int> team;//将队员编号映射到队伍编号 
	
		for(int i=1;i<=t;i++){
			int n,x;
			scanf("%d",&n);//每个队伍的初始成员数
			while(n--){
				scanf("%d",&x);
				team[x]=i;//将每位队员的编号映射到队伍编号 
			}
		}
		printf("Scenario #%d\n",++kase);
		while(1){
			char command[10];
			int number;
			scanf("%s",command);
			if(command[0]=='S') break;
			if(command[0]=='E'){
				scanf("%d",&number);//入队队员的编号 
				if(q2[team[number]].empty()) q1.push(team[number]);
				q2[team[number]].push(number);
			}
			if(command[0]=='D'){
				int front=q1.front();
				printf("%d\n",q2[front].front());
				q2[front].pop(); 
				if(q2[front].empty()) q1.pop();
			}
		}
		printf("\n");
	}
	return 0;
}
发布了28 篇原创文章 · 获赞 0 · 访问量 665

猜你喜欢

转载自blog.csdn.net/weixin_45561591/article/details/103935408
今日推荐