博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Gym-101502B Linear Algebra Test
阅读量:4158 次
发布时间:2019-05-26

本文共 2742 字,大约阅读时间需要 9 分钟。

Gym-101502B Linear Algebra Test


题意:给出n个矩阵的行数与列数,问有多少对矩阵可以相乘。做法:矩阵可以相乘的条件是,前一个矩阵的列数=后一个的行数。我们只要分别用一个数组,保存行数a[]与列数b[],遍历b[],对b[]中每一个数,遍历a[],找到可以配对的行数个数,累加。然而这样做是会超时的,1≤n≤10^5。因为1≤ai,bi≤10^9,即行数与列数的范围,我想到建立一个10^9的数组a[],a[i]中保存的是行数为i的矩阵个数,保存所有列数至b[]。遍历b[],直接a[b[i]],累加。可是我发现不能够用10^9的数组(win10, codeblocks16.01),说数组太大。然后,我就用了两个500000005的数组,哈哈。但是,超内存了。最后,我们用map(映射)优雅的解决了这个问题,思路差不多。

(1)ac代码

#include 
#include
#include
using namespace std;intmain() { int t, n, i, j, a[2][100005]; long long ans; map
m; cin >> t; while( t-- ) { m.clear(); // cin >> n; for( j = 0; j < n; j++ ) { for( i = 0; i < 2; i++ ) { scanf("%d", &a[i][j]); // cin会超时 } } for( j = 0; j < n; j++ ) { m[a[0][j]]++; //cout << a[0][j] << endl; } //cout << endl; ans = 0; for( j = 0; j < n; j++ ) { ans += m[a[1][j]]; //cout << a[1][j] << endl; } cout << ans << endl; } return 0;}

(2)超内存,初始版本

#include 
#include
int a[100000005], b[100005];intmain() { int t, n, e, i, ans; scanf("%d", &t); while( t-- ) { ans = 0; memset(a, 0, sizeof(a)); scanf("%d", &n); for( i = 0; i < n; i++ ) { scanf("%d %d", &e, &b[i]); a[e]++; } for( i = 0; i < n; i++ ) { ans += a[b[i]]; } printf("%d\n", ans); } return 0;}

(3)超内存/编译错误,两个数组

#include 
#include
int a1[500000005], a2[500000005], b[100005];intmain() { int t, n, e, i, ans; scanf("%d", &t); while( t-- ) { ans = 0; memset(a1, 0, sizeof(a1)); memset(a2, 0, sizeof(a2)); scanf("%d", &n); for( i = 0; i < n; i++ ) { scanf("%d %d", &e, &b[i]); if( e > 500000000 ) { a2[e % 500000000]++; } else { a1[e]++; } } for( i = 0; i < n; i++ ) { if( b[i] > 500000000 ) { ans += a2[b[i] % 500000000]; } else { ans += a1[b[i]]; } } printf("%d\n", ans); } return 0;}

(4)超时

#include 
#include
int a[100005], b[100005];intmain() { int t, n, i, j, ans; scanf("%d", &t); while( t-- ) { ans = 0; scanf("%d", &n); for( i = 0; i < n; i++ ) { scanf("%d %d", &a[i], &b[i]); } for( i = 0; i < n; i++ ) { for( j = 0; j < n; j++ ) { if( a[i] == b[j] ) { ans++; } } } printf("%d\n", ans); } return 0;}

转载地址:http://zvkxi.baihongyu.com/

你可能感兴趣的文章
Objective-C学习准备__C语言4
查看>>
bzoj1195 最短母串
查看>>
从产品展示页面谈谈Hybris的特有概念和设计结构
查看>>
神经网络 初步
查看>>
计算表达式
查看>>
AVL树
查看>>
Jmeter脚本录制方法--手工编写脚本(jmeter与fiddler结合使用)
查看>>
postgresql 远程连接不上问题解决
查看>>
MySQL--修改MySQL账号密码
查看>>
学会编辑代码——《狂人C》习题解答4(第二章习题7)
查看>>
JavaWeb学习之会话技术Cookie&Session
查看>>
以前遇到的面试题及答案
查看>>
MySQL 5.7在线设置复制过滤【转】
查看>>
使用websocket-sharp来创建c#版本的websocket服务
查看>>
查看网页程序集
查看>>
【CF1198B】Welfare State
查看>>
乘法逆元
查看>>
CF - Round #587 (Div.3) 总结
查看>>
简单前后端交互
查看>>
EBS报表输出PDF时中文乱码
查看>>