幻方矩阵
一天蒜头君买了一个幻方矩阵,这个矩阵每次可以交换任意两行或者任意两列。花椰妹看到说这么简单的东西,我自己就可以编程实现了。蒜头君要强地说这么简单我肯定也会,但是蒜头君并不会,只好求助你来编程实现。
输入格式
第一行输入两个整数 n,m,表示这个幻方矩阵大小为 n×m。
接下来是一个 n×m 的矩阵。
接下来一行有一个整数 op,表示有 op 次操作。
接下来 op 行,每行有三个整数 x,y,z。
当 x=0 的时候表示交换第 y 行和第 z 行。
当 x=1 的时候表示交换第 y 列和第 z 列。
输出格式
输出交换后的矩阵。
数据范围
对于 30% 的数据,1≤n,m,op≤100。
对于 60% 的数据,1≤n,m,n×m≤10的5次方,1≤op≤100。
对于 100% 的数据,1≤n,m,n×m,op≤10的5次方,1≤ 矩阵中每个数字的大小 ≤10的6次方。
实现代码
比较简单的一道题,在使用动态数组之前是过不了测试点的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| #include<iostream> #include<algorithm> using namespace std; int main() { int n,m; cin>>n>>m; int **a=new int*[n]; for(int i=0;i<n;++i) a[i]=new int[m]; for(int i=0;i<n;++i) for(int j=0;j<m;++j) cin>>a[i][j]; int op; cin>>op; int x,y,z; for(int i=0;i<op;++i) { cin>>x>>y>>z; if(!x) for(int j=0;j<m;++j) swap(a[y-1][j],a[z-1][j]); else for(int j=0;j<n;++j) swap(a[j][y-1],a[j][z-1]); } for(int i=0;i<n;++i) { for(int j=0;j<m-1;++j) cout<<a[i][j]<<" "; cout<<a[i][m-1]; if(i!=n-1) cout<<endl; } for(int i=0;i<n;++i) delete []a[i]; delete []a; return 0; }
|
话题焦点人物
微博提供了一种便捷的交流平台。一条微博中,可以提及其它用户。例如你发出一条微博为:“期末考试顺利 @蒜头君 @花椰菜”,则你提及了蒜头君和花椰菜两位用户。
我们收集了 N(1<N<10000) 条微博,并已将其中的用户名提取出来,用小于等于100 的正整数表示。
通过分析这些数据,我们希望发现大家的话题焦点人物,即被提及最多的人(如果有多个,找到编号最小的),并找出那些提及它的人。
输入格式
输入共两部分:
第一部分是微博数量 N,1<N<10000。
第二部分是 N 条微博,每条微博占一行,表示为:
发送者序号 a,提及人数 k(0≤k≤20),然后是 k 个被提及者序号 1,2…b1,b2…bk;其中 a 和 1,2…b1,b2…bk 均为大于 0 小于等于 100 的整数。相邻两个整数之间用单个空格分隔。
输出格式
输出分两行:
第一行是被提及最多的人的序号;
第二行是提及它的人的序号,从小到大输出,相邻两个数之间用单个空格分隔。同一个序号只输出一次。
实现代码
在这之前,我需要说明的是,我自己的代码仅仅通过了一个测试点,代码里依旧有问题没有解决,不过我认识到自己的代码过于垃圾我的数据结构构建有大问题,然后在网上找到了一份参考答案,和我的思路一致,但在数据结构的规划上比我的好得多,各位可以看原文->
题目 - 话题焦点
然后呢,这是我在看了Grausam的博客后修改的代码(:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| #include<iostream> #include<algorithm> using namespace std; int main() { int N,a[101][101],m,mm; cin>>N; int qwq=0; for(int i=0;i<101;++i) for(int j=0;j<101;++j) a[i][j]=0; int awa=0; for(int i=0;i<N;++i) { cin>>mm>>m; int l; for(int j=0;j<m;++j) { cin>>l; a[mm][l]++; } } int max = 1; for (int i = 1; i <= 100; i++) { for (int j = 1; j <= 100; j++) a[0][i] += a[j][i]; if (a[0][i] > a[0][max]) max = i; } cout<<max<<endl; for(int i=1;i<=100;++i) if(a[i][max]) cout<<i<<" "; return 0; }
|
我原本的10分代码里有好几个数组,我对自己的垃圾代码的评价是:纯粹的模拟是行不通的。