UVALive - 4513 Stammering Aliens

本文介绍了一种通过字符串Hash或后缀数组解决特定问题的方法:给定一个字符串和数字m,找出至少出现m次的最长子串,允许子串间重叠。提供了完整的C++实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.题面

https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2514

2,题意

给定一个字符串和一个数字m, 要求找出最少出现m次的最长的字符串,这些字符串之间可以重叠

3.思路

使用字符串hash或是后缀数组

4.代码

/*****************************************************************
    > File Name: cpp_acm.cpp
    > Author: Uncle_Sugar
    > Mail: uncle_sugar@qq.com
    > Created Time: Sat 20 Aug 2016 23:14:46 CST
*****************************************************************/
# include <cstdio>
# include <cstring>
# include <cctype>
# include <cmath>
# include <cstdlib>
# include <climits>
# include <iostream>
# include <iomanip>
# include <set>
# include <map>
# include <vector>
# include <stack>
# include <queue>
# include <algorithm>
using namespace std;

# define rep(i,a,b) for (i=a;i<=b;i++)
# define rrep(i,a,b) for (i=b;i>=a;i--)

template<class T>void PrintArray(T* first,T* last,char delim=' '){
    for (;first!=last;first++) cout << *first << (first+1==last?'\n':delim);
}

const int debug = 1;
const int size  = 10 + 40000; 
const int INF = INT_MAX>>1;
typedef unsigned long long ll;
const ll MOD = 1000000007;

/*
1.see the size of the input data before you select your algorithm 
2.cin&cout is not recommended in ACM/ICPC
3.pay attention to the size you defined, for instance the size of edge is double the size of vertex
*/

ll Count[size];

char s[size];
int len = 0;

ll hhash[size];

void pretreat(){
	hhash[0] = 0;
	for (int i = 1; i <= len; i++){
		hhash[i] = hhash[i-1] + (s[i-1] - 'a' + 1)*Count[i];
	}
}

ll key[size];
int rrank[size];
bool cmp(int a, int b){
	return key[a] < key[b];
}

int check(int m, int c){
	for (int i = m; i <= len; i++){
		rrank[i] = i;
		key[i] = (hhash[i] - hhash[i - m])*Count[len-i];
	}
	sort(rrank + m, rrank + len + 1, cmp);
	int cnt = 0, pos = 0;
	int right_most = -1;
	for (int i = m; i <= len; i++){
		if (i==m||key[rrank[i]] != key[rrank[i-1]]) {
			pos = rrank[i];	
			cnt = 1;	
		}else {
			pos = max(rrank[i], pos);
			cnt++;
		}
		if (cnt >= c) right_most = max(right_most, pos);
	}
	return right_most;
}

int main()
{
	/*std::ios::sync_with_stdio(false);cin.tie(0);*/
	Count[0] = 1;
	for (int i = 1; i < size; i++) Count[i] = Count[i-1]*MOD;
	int m;
	while (scanf("%d",&m) != EOF){
		if (!m) break;
		scanf("%s", s);
		len = strlen(s);
		pretreat();
		int l = 0, r = len + 1;
		int anspos = 0;
		while (l < r - 1){
			int mid = l+r>>1;
			int k = check(mid, m);
			if (k != -1){
				l = mid;	
				anspos = k;
			}else {
				r = mid;	
			}
		}
		if (l == 0)	
			printf("none\n");
		else 
			printf("%d %d\n",l ,anspos-l);
	}
	return 0;
}







内容概要:该论文探讨了一种基于粒子群优化(PSO)的STAR-RIS辅助NOMA无线通信网络优化方法。STAR-RIS作为一种新型可重构智能表面,能同时反射和传输信号,与传统仅能反射的RIS不同。结合NOMA技术,STAR-RIS可以提升覆盖范围、用户容量和频谱效率。针对STAR-RIS元素众多导致获取完整信道状态信息(CSI)开销大的问题,作者提出一种在不依赖完整CSI的情况下,联合优化功率分配、基站波束成形以及STAR-RIS的传输和反射波束成形向量的方法,以最大化总可实现速率并确保每个用户的最低速率要求。仿真结果显示,该方案优于STAR-RIS辅助的OMA系统。 适合人群:具备一定无线通信理论基础、对智能反射面技术和非正交多址接入技术感兴趣的科研人员和工程师。 使用场景及目标:①适用于希望深入了解STAR-RIS与NOMA结合的研究者;②为解决无线通信中频谱资源紧张、提高系统性能提供新的思路和技术手段;③帮助理解PSO算法在无线通信优化问题中的应用。 其他说明:文中提供了详细的Python代码实现,涵盖系统参数设置、信道建模、速率计算、目标函数定义、约束条件设定、主优化函数设计及结果可视化等环节,便于读者理解和复现实验结果。此外,文章还对比了PSO与其他优化算法(如DDPG)的区别,强调了PSO在不需要显式CSI估计方面的优势。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值