CSU1979 古怪的行列式

E(1979): 古怪的行列式

Submit Page    Summary    Time Limit: 1 Sec     Memory Limit: 128 Mb     Submitted: 41     Solved: 30    


Description

这几天,子浩君潜心研究线性代数。 行列式的值定义如下:

 其中,τ(j1j2...jn)为排列j1j2...jn的逆序数。

子浩君很厉害的,但是头脑经常短路,所以他会按照行列式值的定义去计算,这个行列式子浩君也还是能算对的。但是,在计算的过程中,如果出现连续三行选取的元素为83(S),83(S),82(R)的话,子浩君会忍不住拿走它们:-D,然后这三个数的乘积将被视为1,而其它数值计算不变。那么在子浩君的计算下,最后得到的行列式的值会为多少呢?

Input

数据第一行为一个整数T(T<=50)。 接下来有T组测试数据,每组数据开始有一个整数n(2<=n<=8)。 接下来有n行数字,每行有n个数字,第ith行第jth个数字代表矩阵的第ith行第jth列的数字,保证每个数字在int范围内的非负整数。

Output

输出一个整数,保证在[-(2^63-1), 2^63-1]范围内,即使在子浩君计算过程中也是。

Sample Input

4

2
1 1
0 1

3
83 1 1
0 83 1
0 0 82

3
83 1 1
0 82 1
0 0 83

3
83 1 1
0 83 1
0 1 82

Sample Output

1
1
564898
-82

Hint

例如,当子浩君遇到a11 * a22 * a33 * a44 = 83 * 83 * 82 * 1,会计算成1 * 1 = 1,而83 * 82 * 83 * 1或者83 * 83 * 1 * 82则不会改变运算规则

 

这道题两个知识点,首先逆序数是指在一行数字中,当数字的大小和排列的顺序相反的所有情况的总数叫逆序数(例:4213的逆序数为四  42 41 43 21)。第二,行列式值的计算。剩下的就是模拟了,最多矩阵只有8,所以不会超时。

 

#include<map>
#include<algorithm>
#include<cstdio>
#include <iostream>
#include<cmath>
#include<string.h>
#include<cstring>
using namespace std;
typedef long long ll;
const double PI = acos(-1.0);
const int INF = 1000000000;
const int maxn = 10+2;
int T=0,n,m;

int b[maxn];
ll a[maxn][maxn];

int Caculate(int x[]){
     int k=0;
     for(int i = 1 ; i<=n ; i++)
     {
         for(int j = i+1 ; j<=n ; j++)
         {
              if(x[j]<x[i])  k++;
         }
     }
     return k;
}

int main(){
     //freopen("in.txt","r",stdin);
     ll ans;
     scanf("%d",&T);
     while(T--){
          scanf("%d",&n);
          for(int i = 1 ; i<=n ; i++)
          {
              b[i] = i;
              for(int j = 1 ; j<=n ; j++)
              {
                    scanf("%lld",&a[i][j]);
              }
          }
          ans = 0;
          do{
               int r = Caculate(b);
               //cout<<"r="<<r<<"\n";
               ll temp = 1;
               for(int i = 1 ; i<=n ; i++)
               {
                    if(i+2<=n&&a[i][b[i]]==83&&a[i+1][b[i+1]]==83&&a[i+2][b[i+2]]==82)
                        i = i+2;
                    else
                      temp = temp * a[i][b[i]];
                      //cout<<"temp="<<temp<<"\n";
               }
               if(r&1)  ans -= temp;
               else  ans += temp;
               //cout<<"ans="<<ans<<"\n";
          }while(next_permutation(b+1,b+1+n));  //下一个排列组合
          printf("%lld\n",ans);
     }
     return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: CSU飞跃手册2019是一个以服务学生发展为宗旨的学生服务项目,帮助学生实现个人成长和职业发展目标。飞跃手册提供了诸如成功学、职业规划、就业技巧以及个人发展等方面的指导,帮助学生掌握自我认知、提升职场竞争力并构建良好的人脉关系。 飞跃手册2019包括三个模块。第一个模块着重讲解如何探索自我,明确职业目标和规划职业道路。这些关键的步骤帮助学生发现自己的职业特长和兴趣爱好,从而为个人职业发展做出决策和规划。 第二个模块提供了职业发展过程中的必备技能,如招聘面试技巧、简历写作、职场沟通、决策和问题解决能力,以及管理和领导力等。这些技能帮助学生在职场中不断学习和成长,并展示自己的优势。 第三个模块则介绍如何利用社会资源和人脉关系来推动个人职业发展。它包括了网络管理、人脉建立、社交礼仪和社会责任等方面的指导。 总之,CSU飞跃手册2019是一份应对职场挑战和工作生涯的指南, 帮助学生建立自己的职业目标并实现自我发展。它讲解了个人成长、职场技能、人脉力量和社会责任等方面的内容,为学生的成功创造了一个强有力的支撑体系。 ### 回答2: CSU飞跃手册2019是一本由中国海洋大学控制科学与工程学院发行的指导学生爆炸性训练和实习的手册。该手册将学生分为不同职业兴趣组,并提供了具体的介绍、岗位培训以及实习就业方案。 该手册还包括了部分参考书目、学术论文和个人成长方向的建议,在实习期间指导学生更好地发展个人能力和提高自己的竞争力。除此之外,该手册还有一些校内外的实践活动介绍和经验分享。这些活动涵盖了多个不同领域,包括科技、创业、环保和社会公益等。 该手册还提供了一些面试技巧和求职指南,帮助学生更好地应对就业市场的挑战。此外,该手册还鼓励学生通过网络平台和社会实践等多种途径积累人脉资源,增强自己的社交和交际技巧。 总的来说,CSU飞跃手册2019为学生提供了一个全面的指导工具,帮助他们更好地理解职业规划,提高个人素质,扩展职业视野并实现自我价值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值