https://codeforces.com/group/5yyKg9gx7m/contest/269717/problem/A
题目描述:
4 1 2 3 4 1 3 2 4 2 1 3
从左往右看,如果一个数无论在哪一行都在另一个数左边,那么这两个数构成一个组合,问有多少个组合。
分析:
范围比较小,直接暴力。用vector存他所在的位置,比如a[ 2 ] [ 1]表示数字2在第一行的位置。选定2个数,那么对每2行,判断他们位置差是否同号。
代码:
#include <bits/stdc++.h> using namespace std; typedef long long ll; int main() { int k,n; cin>>k>>n; vector<int> a[n+6]; for(int i=1;i<=k;i++) { for(int j=1;j<=n;j++) { int num; cin>>num; a[num].push_back(j); } } int ans=0; for(int i=1;i<=n;i++) { for(int j=i+1;j<=n;j++) { bool con=true; for(int p=0;p<k-1;p++) { if((a[i][p]-a[j][p])*(a[i][p+1]-a[j][p+1])<0) { con=false; break; } } if(con) ans++; } } cout<<ans<<endl; return 0; }
原文:https://www.cnblogs.com/studyshare777/p/12405095.html