首页 > 其他分享 >CF1792 D. Fixed Prefix Permutations : Educational Codeforces Round 142 (Rated for Div. 2) D

CF1792 D. Fixed Prefix Permutations : Educational Codeforces Round 142 (Rated for Div. 2) D

时间:2023-01-25 16:22:37浏览次数:51  
标签:Educational Rated CF1792 beauty int aj begin vector 序列

给出n个长度为m的排列(a1, a2, a3, ..., an)

定义一个操作 r=ai•aj : r[k]=a[j][a[i][k]]

定义一个排列(p1, p2, ..., pn)的beauty为最大的k,使得p[1]=1, p[2]=2, .., p[k]=k (p[1]!=1时, beauty=0)

分析:

  暴力:从1~n枚举i,j,求出排列r=ai*aj,然后再去求beauty,这样做法时间复杂度为O(mn2),肯定会超时

  正确做法:

    以aj序列3 1 2 4举例,这个序列对2 3 1 4(这几个数字分别为aj中 1 2 3 4的位置)这样的序列有贡献

    所以可以枚举1~n的aj,预处理出一个n×m的表,然后枚举1~n的aj在表中查找与自身最接近的一行,然后算出beauty

具体做法:

  vector< vector<int> > a(n, vector<int> m), b(a); //其中a存输入数据,b是生成的表,b[i][k]的值应为k在a[i]这个序列中的位置(注意:由于后面对b.begin(), b.end()排序,所以b[i]序列是以0起的,所以输入数据时,每个数据减1,使得长度为m的排列从1~m变成0~m-1)

  然后对b.begin(), b.end()进行排序,之后用int loc=lower_bound(b.begin(), b.end(), a[i])-b.begin()来找出b这个表中与a[i]最接近的一行序列下标,b[loc]与b[loc-1](如果两者都存在的话)时与a[i]最接近的两个,分别求出前多少个数是相同的,更新答案即可

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 void solve()
 4 {
 5     int n, m;
 6     scanf("%d%d", &n, &m);
 7     vector< vector<int> > a(n, vector<int>(m)), b(a);
 8     for(int i=0; i<n; i++){
 9         for(int j=0; j<m; j++){
10             scanf("%d", &a[i][j]);
11             a[i][j]--;
12             b[i][a[i][j]]=j;
13         }
14     }
15     sort(b.begin(), b.end());
16     for(int i=0; i<n; i++){
17         int ans=0;
18         int loc=lower_bound(b.begin(), b.end(), a[i])-b.begin(); //b[loc]与b[loc-1]是最接近a[i]的两个序列 
19         if(loc<n){
20             int cnt=0;
21             for(int k=0; k<m; k++){
22                 if(a[i][k]==b[loc][k]){
23                     cnt++;
24                 }else{
25                     break;
26                 }
27             }
28             ans=max(ans, cnt);
29         }
30         if(loc>0){
31             int cnt=0;
32             for(int k=0; k<m; k++){
33                 if(a[i][k]==b[loc-1][k]){
34                     cnt++;
35                 }else{
36                     break;
37                 }
38             }
39             ans=max(ans, cnt);
40         }
41         printf("%d ", ans);
42     }
43     printf("\n");
44 }
45 int main(void)
46 {
47     int T=1;
48     scanf("%d", &T);
49     while(T--)solve();
50     return 0;
51 }
View Code

 

标签:Educational,Rated,CF1792,beauty,int,aj,begin,vector,序列
From: https://www.cnblogs.com/JustACommonMan/p/17067029.html

相关文章

  • CF Educational Round 142 (Rated for div2) 题解
    A注意到除了血量为\(1\)的怪物,其余的怪物直接斩杀是更合理的。所以只要统计血量为\(1\)的怪物的个数即可。#include<cstdio>voidsolve(){ intn;scanf("%d",......
  • Educational Codeforces Round 1 个人总结A-E
    EducationalCodeforcesRound1A.TrickySum数学,求\(1\dotsn\)的和减去小于等于n的二次幂乘2之和LLf[40];voidsolve(){ LLn; cin>>n; LLans=n+n*(n-1)/2;......
  • cratedb 支持游标了
    好久没太关注cratedb了,就在最近看了下发现支持游标了,还是很强大的,值得体验试用下,以前我在尝试集成cratedb与hasura的时候发现了一些问题,从目前的一些特殊,似乎是可以尝试......
  • Educational Codeforces Round 14
    EducationalCodeforcesRound14AFashioninBerland做法:模拟代码:voidsolve(){intn;cin>>n;intans=0;for(inti=1;i<=n;i++){......
  • Educational Codeforces Round 17
    EducationalCodeforcesRound17https://codeforces.com/contest/762A.k-thdivisor#include<bits/stdc++.h>#definelllonglongusingnamespacestd;lln,k;......
  • Educational Codeforces Round 120 (Rated for Div. 2) C,D
    EducationalCodeforcesRound120(RatedforDiv.2)C,DCC这个题目大意是给我们n个数,我们可以把ai变成ai-1,或者是把ai变成aj,而我们需要知道最少的操作数把n个数的和......
  • Educational Codeforces Round 119 (Rated for Div. 2)
    EducationalCodeforcesRound119(RatedforDiv.2)我真是越来越菜了,现在竟然连a都做不出来了,o(╥﹏╥)oAA这个题是对于每一个ai和ai+1,(an和a1)都有一个判断,判断这两......
  • Educational Codeforces Round 108 (D记忆化搜索)
    D.MaximumSumofProducts题目大意:给定两个长度为n(n<=5000)的整型数组a,b可以对数组a进行至多一次以下操作:选择l,r并对l到r进行翻转求\(\sum\)a\(_i\)*b\(_i\)的......
  • 题解 CF678D【Iterated Linear Function】
    暴力解法。初学群论,可能写的不是很严谨,望大佬指正。problem\[g^{(n)}(x)=\begin{cases}x,&(n=0).\\f(g^{(n-1)}),&(n>0).\end{cases}\]其中\(f\)是一次函数。给出......
  • 【论文导读】- SpreadGNN: Serverless Multi-task Federated Learning for Graph Neur
    文章目录​​论文信息​​​​摘要​​​​SpreadGNNFramework​​​​用于图层次学习的联邦图神经网络​​​​图神经网络的联邦多任务学习​​​​SpreadGNN​​​​DPA-......