1. 减一
给出一组数,求出最长的子串。使得这个子串中的数最大值和最小值的差值最大为1。
如1 5 4 1 2 4 2 5 5。最长子串为5 4 4 5 5,长度为5
红黑树计数即可
int main(int argc, char *argv[]) {
int n;
cin>>n;
vector<int> nums(n);
map<int,int> m;
for(int i=0;i<n;i++){
cin>>nums[i];
m[nums[i]]++;
}
int res = 0;
for(auto &[key,val]:m){
if(m.count(key+1)) res = max(res,m[key]+m[key+1]);
res = max(res,m[key]);
}
cout<<res;
return 0;
}
2. 小杰的灵犀之旅
纯简单题
int main() {
int T;
cin >> T;
for (int i = 0; i < T; i++) {
int n, m;
cin >> n >> m;
long long res = 0;
for (int j = 0; j < n; j++) {
int l, r;
cin >> l >> r;
res += r - l + 1;
res %= 998244353;
}
cout << res << endl;
}
return 0;
}
3. 消息队列
王小二正在参与一款游戏中的聊天工具的开发,他负责其中的会话列表部分。 会话列表显示为一个从上到下的多行控件,其中每一行表示一个会话,每一个会话都可以以一个唯一正数id表示。
当用户在一个会话中发送或者接收信息时,如果该会话已经在会话列表中,则会从原来的位置移到列表最上方;如果没有在会话列表中,则在会话列表最上方插入该会话。
王小二现在要进行测试,他会先把会话列表清空,等待接收信息。当接收完大量来自不同会话的信息后,就输出当前的会话列表,以检查其中是否有bug。
简化的LRU,用栈反向输出即可
int main(int argc, char *argv[]) {
int t;
cin>>t;
while(t--){
int n;
cin>>n;
//按栈存数即可,已经出过的跳过
stack<int> st;
unordered_set<int> s;
int num;
for(int i=0;i<n;i++){
cin>>num;
st.push(num);
}
while(!st.empty()){
if(st.size()!=n) cout<<" ";//输出空格
int cur = st.top(); st.pop();
if(s.find(cur)==s.end()) cout<<cur;//没有输出过
s.insert(cur);//标识该id已经出过
}
if(t>0) cout<<endl;
}
return 0;
}
4. 交点数
假设平面上有n条直线,且不存在三条或以上直线共点的情况,
求这n条直线可能存在多少种不同交点数。例n=2,则可能的交点数量为0(平行)或者1(不平行)
5. 敏感词过滤
敏感词过滤一直是游戏里面最恼人的事情。恶意玩家总是想办法通过一定的修改来达到既能让系统检测不到,又让其他人看出来他发的内容。
现在,假设这些恶意玩家有这样两种操作:把字符串a的某些大写字符变成小写字符把字符串a的某些大写字符删掉
现给出两个字符串,判断能否通过以上两种操作从A字符串变成B字符串。
类似编辑距离
标签:24,互娱,int,res,列表,会话,key,st,灵犀
From: https://www.cnblogs.com/929code/p/18403670