暴力枚举对于每一个牛i,牛j有多少次在它前面。如果这个值恰好等于k,也就是命令的行数,那么就直接输出这个即可。
数据范围小的永远不需要算法,暴力yyds!
#include <bits/stdc++.h>
using namespace std;
int k, n, a[20], f[20][20];
int main() {
scanf("%d%d", &k, &n);
for (int i = 1; i <= k; i++) {
for (int j = 1; j <= n; j++) scanf("%d", &a[j]);
for (int j = 1; j < n; j++)
for (int x = j + 1; x <= n; x++) f[a[j]][a[x]]++;
}
int ans = 0;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) if (f[i][j] == k) ans++;
} printf("%d\n", ans);
// for (int i = 1; i <= n; i++) {
// for (int j = 1; j <= n; j++) printf("%d ", f[i][j]);
// puts("");
// }
return 0;
}
太妙了orz
大佬们,这里的下标为什仫不能从0开始???
把这一行代码改为for(int i = 0;i<=n;i)
for(int j = 0;j<=n;j)
if(f[i][j] == k) ans++;
就可以了
因为二维数组S是从下标1开始的
这个解法方便多了
hhhh
牛啊
可以。
另外这回stOtue上不来了吧
hhh
这个评论笑死
我先点踩,然后去@stOtue老师一下 ><
hhh
这位老师貌似改名换头像了…………
额
闭关修炼呢好像~
不过你这方法确实牛
for (int j = 1; j < n; j)
for (int x = j + 1; x <= n; x) f[a[j]][a[x]]++;
兄弟,这句话中的f是统计啥的?
f[i][j]:j排在i之后的次数
嗷嗷,谢谢
嗯嗯
for (int j = 1; j < n; j)
for (int x = j + 1; x <= n; x) f[a[j]][a[x]]++;
这一行是什么意思?答主。
我懂了
啥意思啊
a[i]在a[x]前出现过一次
谢谢,想问问为什么最后if(f[i][j]==k) ans++?f[i][j]==k是什么意思
也就是说i在j前面出现过了k次,达到了题目累加答案的要求(找到一组解)
谢谢大佬!
一起加油hh
我用的不是暴力解法康康我的,虽然时间复杂度没怎么降低 但是代码思路很好理解
赞
我仔细一想,貌似我也是暴力哈哈哈哈哈哈,gan!
一起加油!
妙啊
谢谢hh