当前位置: 首页 > news >正文

开发网站定制腾讯云轻量服务器

开发网站定制,腾讯云轻量服务器,网站的题目,网络营销策划书的结构2023CCPC网络赛(A E) The 2nd Universal Cup. Stage 3: Binjiang - Dashboard - Contest - Universal Cup Judging System A. Almost Prefix Concatenation 思路:首先考虑如何求出每个位置允许失配一次的LCP长度 , 可以二分哈希求LCP , 即…

2023CCPC网络赛(A E)

The 2nd Universal Cup. Stage 3: Binjiang - Dashboard - Contest - Universal Cup Judging System

A. Almost Prefix Concatenation

思路:首先考虑如何求出每个位置允许失配一次的LCP长度 , 可以二分哈希求LCP , 即先二分一次求未失配的位置 , 向右扩展一位再次二分。

求出每个位置允许失配一次的LCP长度后考虑如何维护贡献 , 考虑最暴力的维护方式:

设计状态 dp[i][j] 为 i 位置及其后缀字符串分成 j 份 的方案数 , 这样显然很好转移。 但是时空双复杂度都是O(n^2) ,考虑优化 , 对于时间复杂度 , 我们不难发现 , 我们每次转移的位置都是一个区间 , 考虑后缀和优化 , O(1) 的进行转移。 对于空间复杂度 ,显然很难优化。转换思路 , 考虑直接维护平方贡献。

n o w 1 [ i ] 表示 i 所在后缀字符串划分的方案数 now1[i] ~表示 i所在后缀字符串划分的方案数 now1[i] 表示i所在后缀字符串划分的方案数

n o w 2 [ i ] 表示 i 所在后缀字符串划分的方案长度和 now2[i] ~表示i所在后缀字符串划分的方案长度和 now2[i] 表示i所在后缀字符串划分的方案长度和

n o w 3 [ i ] 表示 i 所在后缀字符串划分的方案长度平方和 now3[i] ~表示i所在后缀字符串划分的方案长度平方和 now3[i] 表示i所在后缀字符串划分的方案长度平方和

对于位置 i , 其转移区间显然是[i + 1 , i + lcp[i]] , 所以我们要对上面三个数组维护后缀和

s u f 1 [ i ] 为 n o w 1 [ i ] 的后缀和 suf1[i]~为now1[i]的后缀和 suf1[i] now1[i]的后缀和

s u f 2 [ i ] 为 n o w 2 [ i ] 的后缀和 suf2[i]~为now2[i]的后缀和 suf2[i] now2[i]的后缀和

s u f 3 [ i ] 为 n o w 3 [ i ] 的后缀和 suf3[i]~为now3[i]的后缀和 suf3[i] now3[i]的后缀和

对于转移:

不妨设  l = i + 1 , r = i + l c p [ i ] 不妨设 ~l=i+1,~r=i+lcp[i] 不妨设 l=i+1, r=i+lcp[i]

n o w 1 [ i ] = s u f 1 [ l ] − s u f 1 [ r + 1 ] (方案数直接转移) now1[i] = suf1[l] - suf1[r+1](方案数直接转移) now1[i]=suf1[l]suf1[r+1](方案数直接转移)

n o w 2 [ i ] = s u f 2 [ l ] − s u f 2 [ r + 1 ] + n o w 1 [ i ] (每种方案长度都加 1 ) now2[i] = suf2[l] - suf2[r+1]+now1[i](每种方案长度都加1) now2[i]=suf2[l]suf2[r+1]+now1[i](每种方案长度都加1

n o w 3 [ i ] = ( s u f 3 [ l ] − s u f 3 [ r + 1 ] ) + 2 ∗ ( s u f 2 [ l ] − s u f 2 [ r + 1 ] ) + ( s u f 1 [ l ] − s u f 1 [ r + 1 ] ) [ 考虑 ( n + 1 ) 2 = n 2 + 2 ∗ n + 1 ] now3[i] = (suf3[l] - suf3[r+1])+2*(suf2[l]-suf2[r+1])+(suf1[l]-suf1[r+1])~~[考虑(n+1)^2=n^2+2*n+1] now3[i]=(suf3[l]suf3[r+1])+2(suf2[l]suf2[r+1])+(suf1[l]suf1[r+1])  [考虑(n+1)2=n2+2n+1]

注意点:注意求LCP的时候双哈希即可 , 单哈希过不去。

#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define IOS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#define int long long
const int INF = 9e18;
const int N = 1e6 + 10;
const int mod = 998244353;
typedef pair<int,int>PII;
int n , m , lcp[N];
string s , t;const int mod1 = 1e9 + 7;
const int mod2 = 1e9 + 9;
const int Base = 131;int base1[N] , ht1[N] , base2[N] , ht2[N] , hs1[N] , hs2[N];
int suf1[N] , suf2[N] , suf3[N];
int now1[N] , now2[N] , now3[N];inline void init_hash(int n){base1[0] = base2[0] = 1;for(int i = 1 ; i <= n ; i ++) base1[i] = base1[i - 1] * Base % mod1;for(int i = 1 ; i <= n ; i ++) base2[i] = base2[i - 1] * Base % mod2; 
}int add(int x , int y) {x %= mod;y %= mod;return (x + y) % mod;
}
int reduce(int x , int y) {x %= mod;y %= mod;return ((x - y) % mod + mod) % mod;
}inline PII get_s(int l,int r){int x = ((hs1[r] - hs1[l] * base1[r - l]) % mod1 + mod1) % mod1;int y = ((hs2[r] - hs2[l] * base2[r - l]) % mod2 + mod2) % mod2;return {x , y};
}inline PII get_t(int l,int r){int x = ((ht1[r] - ht1[l] * base1[r - l]) % mod1 + mod1) % mod1;int y = ((ht2[r] - ht2[l] * base2[r - l]) % mod2 + mod2) % mod2;return {x , y};
}signed main(){cin >> s >> t;n = s.size();m = t.size();init_hash(max(n , m));hs1[0] = hs2[0] = 0;for(int i = 1 ; i <= n ; i ++) hs1[i] = (hs1[i - 1] * Base % mod1 + s[i - 1]) % mod1;for(int i = 1 ; i <= n ; i ++) hs2[i] = (hs2[i - 1] * Base % mod2 + s[i - 1]) % mod2;ht1[0] = ht2[0] = 0;for(int i = 1 ; i <= m ; i ++) ht1[i] = (ht1[i - 1] * Base % mod1 + t[i - 1]) % mod1;for(int i = 1 ; i <= m ; i ++) ht2[i] = (ht2[i - 1] * Base % mod2 + t[i - 1]) % mod2;for(int i = 0 ; i < n ; i ++) {int l = i , r = min(i + m - 1 , n - 1) , mid = 0;while(l <= r) {mid = (l + r) >> 1;if(get_s(l , mid + 1) != get_t(l - i , mid + 1 - i)) r = mid - 1;else l = mid + 1;}int ll = l , rr = min(i + m - 1 , n - 1) , midd = 0;if(ll > rr) { lcp[i] = ll - i; continue; }ll += 1;if(ll > rr) { lcp[i] = ll - i; continue; }while(ll <= rr) {midd = (ll + rr) >> 1;if(get_s(ll , midd + 1) != get_t(ll - i , midd + 1 - i)) rr = midd - 1;else ll = midd + 1;}lcp[i] = ll - i;}suf1[n] = 1;for(int i = n - 1 ; i >= 0 ; i -- ){int l = i + 1 , r = i + lcp[i];now1[i] = reduce(suf1[l] , suf1[r + 1]);now2[i] = add(reduce(suf2[l] , suf2[r + 1]) , now1[i]);now3[i] = add(add(reduce(suf3[l] , suf3[r + 1]) , 2 * reduce(suf2[l] , suf2[r + 1])) , reduce(suf1[l] , suf1[r + 1]));suf1[i] = add(suf1[i + 1] , now1[i]);suf2[i] = add(suf2[i + 1] , now2[i]);suf3[i] = add(suf3[i + 1] , now3[i]); }cout << now3[0] << "\n";return 0;
}
//freopen("文件名.in","r",stdin);
//freopen("文件名.out","w",stdout);/*
g1[i] i 点所在后缀切割方案数
g2[i] i 点所在后缀切割方案长度和
g3[i] i 点所在后缀切割方案长度平方和suf1[i] :now1[i] 的后缀和
suf2[i] :now2[i] 的后缀和
suf3[i] :now3[i] 的后缀和
*/

E. Robot Experiment

对于每个位置显然会有三个状态:

状态 1 :未走过 状态1:未走过 状态1:未走过

状态 2 :不能走 状态2:不能走 状态2:不能走

状态 3 :必须走 状态3:必须走 状态3:必须走

枚举所有可能 , 状态一进行讨论 , 状态二三直接搜索即可。

#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define IOS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#define int long long
const int INF = 9e18;
const int N = 2e6 + 10;
const int mod = 1e9 + 7;
typedef pair<int,int>PII;int vis[110][110];
/*
0  可讨论
1  不能走
-1 必须走
*/int n ;
string s;
set<pair<int , int>>st;
void dfs(int x , int y , int pos) {if(pos == n) {st.insert({x , y});return ;}int xx = x , yy = y;if(s[pos] == 'L') xx -= 1;if(s[pos] == 'R') xx += 1;if(s[pos] == 'U') yy += 1;if(s[pos] == 'D') yy -= 1;if(vis[xx + 50][yy + 50] == 0) {vis[xx + 50][yy + 50] = 1;dfs(x , y , pos + 1);vis[xx + 50][yy + 50] = 0;vis[xx + 50][yy + 50] = -1;dfs(xx , yy , pos + 1);vis[xx + 50][yy + 50] = 0;}if(vis[xx + 50][yy + 50] == 1) {dfs(x , y , pos + 1);}if(vis[xx + 50][yy + 50] == -1) {dfs(xx , yy , pos + 1);}}signed main(){IOScin >> n >> s;vis[50][50] = -1;dfs(0 , 0 , 0);cout << st.size() << "\n";for(auto [x , y] : st) {cout << x << " " << y << "\n";}return 0;
}
//freopen("文件名.in","r",stdin);
//freopen("文件名.out","w",stdout);
http://www.15wanjia.com/news/188820.html

相关文章:

  • 无锡做智能网站做网站语言最好
  • 国家住房和城乡建设厅网站定制网站设计方案
  • 建设银行公户网站哪个dns访问国外网站
  • 自己网站如何做关键词排名建设人才信息网是什么网站
  • 购物网站开发平台苏州门户网站
  • 网上发帖推广seo的基础是什么
  • 中国网站建设哪家公司好网站开发的功能需求怎么写
  • 分类信息网站程序wordpress侧边栏字体修改
  • 网站开发 教材微信菜单怎么做微网站
  • 邢台网站制作市场装修计算器在线计算
  • 做书的封面网站网推是做什么的
  • 课堂网站开发百度风云榜明星
  • PC网站开发的意义做本地网站
  • 网站挂马黑链检测清除工具公司级做宣传图的网站
  • 溧水区城乡建设局网站湖北 个人网站备案时间
  • 自助网站建设开发流程步骤学校网站首页制作
  • 外贸网站交易平台wordpress的用户登录地址默认
  • 建设一个货架网站中国公司名录大全
  • 阿里云企业网站备案如何做一个微笑公众号推文
  • 有专门做面包的网站么深圳推广公司
  • dw网站开发流程lovestory wordpress
  • 国内域名和国外域名区别手机版网站优化
  • 杭州网站优化流程小程序微盟
  • 做牙齿的招聘网站iis运行wordpress
  • 个体工商户可以网站建设吗公司部门管理制度
  • 网站建设四不问题如何做优化网站排名
  • 电子商务网站建设商业网站的域名后缀是什么
  • 腾云公司做网站wordpress log
  • 做婚礼效果图的网站有哪些建筑网片的用途有哪些
  • 心理医院网站优化服务商网站建设经营范围怎么写