ZJ21. 特征提取
描述
输入描述
第一行包含一个正整数N,代表测试用例的个数。输出描述
对每一个测试用例,输出特征运动的长度作为一行示例1
输入:
1 8 2 1 1 2 2 2 1 1 1 4 2 1 1 2 2 2 2 2 1 4 0 0 1 1 1 1 1 1
输出:
3
说明:
特征<1,1>在连续的帧中连续出现3次,相比其他特征连续出现的次数大,所以输出3C 解法, 执行用时: 1ms, 内存消耗: 364KB, 提交时间: 2021-03-07
#include <stdio.h> #include <stdlib.h> int isinside(int a,int b,int *buf,int len) { int i; // printf("len=%d\n",len); for(i=0;i<len;i++) { if(i%2==1) { if(buf[i-1]==a&&buf[i]==b) return 1; } } return 0; } int main(void) { int n,i,j,z,a,b,m,k,max=0; int buf[10][10]; memset(buf,0,100*sizeof(int)); scanf("%d",&n); while(n>0) { scanf("%d",&m); // m=8 for(i=0;i<m;i++) { scanf("%d",&k); if(k==0) continue; int buf1[k*2]; for(j=0;j<k*2;j++) { scanf("%d",&buf1[j]); if(j%2==1) buf[buf1[j-1]][buf1[j]]++; } for(j=0;j<10;j++) { for(z=0;z<10;z++) { // printf("%d") if(isinside(j,z,buf1,k*2)==0) buf[j][z]=0; else { // printf("j=%d,z=%d,max=%d,buf[%d][%d]=%d\n",j,z,max,j,z,buf[j][z]); if(max<buf[j][z]) max=buf[j][z]; } } } } printf("%d\n",max); n--; } }
C++ 解法, 执行用时: 1ms, 内存消耗: 376KB, 提交时间: 2020-07-06
#include<iostream>; #include<map>; #include<algorithm>; using namespace std; int main(){ int n; while (cin>>n){ int m; cin>>m; int max=1; map<pair<int, int>, int> pre; map<pair<int, int>, int> now; for (int i=0;i<m;i++){ int k; cin>>k; if (k==0) { pre.clear(); now.clear(); } else { pair<int, int> xy; for (int j=0;j<k;j++){ cin>>xy.first>>xy.second; if (pre.find(xy)!=pre.end()){ now[xy]=pre[xy]+1; if (now[xy]>max) max=now[xy]; } else { now[xy]=1; } } pre.clear(); pre.swap(now); } } cout<<max<<endl; } return 0; }