1442B.B. Identify the Operations(思维题。。。。)
发布日期:2021-06-30 10:24:51
浏览次数:2
分类:技术文章
本文共 1005 字,大约阅读时间需要 3 分钟。
设 a a a数组为 a 1 a 2 a 3 a 4 a 5 a_1\ a_2\ a_3\ a_4\ a_5 a1 a2 a3 a4 a5
设想现在需要添加 a 3 a_3 a3,那么可以删除 a 2 a_2 a2,也可以删除 a 4 a_4 a4
删除 a 2 a_2 a2后, a 3 a_3 a3代替 a 2 a_2 a2靠近了 a 1 a_1 a1
下次如果需要添加 a 1 a_1 a1,同样可以删掉 a 3 a_3 a3
对于数字 a 1 a_1 a1而言,情况并没有发生任何变化
同理即使删除 a 4 a_4 a4,对 a 5 a_5 a5也不会产生任何变化
所以一个数是否能删除之和是否出现在后续的 b b b数组中而已…
添加一个数有几种可能,不过取决于周围的两个数是否能删除而已
因为删除数字不会对后续和开始的情况有任何改变
#includeusing namespace std;typedef long long ll;const int mod = 998244353;const int maxn = 2e5+10; int t,n,k,a[maxn],b[maxn],pos[maxn],vis[maxn];int main(){ cin >> t; while( t-- ) { cin >> n >> k; for(int i=1;i<=n;i++) cin >> a[i], vis[a[i]] = i; for(int i=1;i<=k;i++) cin >> b[i], pos[b[i]] = i; ll ans = 1; for(int i=1;i<=k;i++) { ll cnt = 0; int r = a[vis[b[i]]+1];//后一个下标 int l = a[vis[b[i]]-1];//前一个下标 if( vis[b[i]]!=n&&pos[r]==0 ) cnt++; if( vis[b[i]]!=1&&pos[l]==0 ) cnt++; ans = ans*cnt%mod; pos[b[i]] = 0; } cout << ans << endl; for(int i=1;i<=n;i++) vis[i] = pos[i] = 0; }}
转载地址:https://issue-is-vegetable.blog.csdn.net/article/details/110148655 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月27日 00时28分43秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
COMP7404 Machine Learing——KNN
2019-04-30
COMP7404 Machine Learing——SVM
2019-04-30
COMP7404 Machine Learing——ROC
2019-04-30
COMP7404 Machine Learing——Ensemble Learning& MajorityVoteClassifier & Bagging & Boosting(Adaboost)
2019-04-30
Pylearn2
2019-04-30
Cassandra——docker
2019-04-30
CQL命令
2019-04-30
Cassandra的Allow Filtering
2019-04-30
UWB定位
2019-04-30
Weka(三)——Association and Clustering
2019-04-30
PCD(点云数据)文件格式 & pcd文件的读取与写入
2019-04-30
读取点云pcd文件转化为numpy array & 可视化(python pcl)
2019-04-30