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;
}