1 6 61 2 20 11 4 16 5 4 3 2 1Sample Output
Case #1:1-1202-1-1HINT
每次输入第i数个a[i]的时候 判断该编号i之前有没有对应与f(a[i])相同的f(a[x]) (x<i) ,如果没有ans[i]就是-1,如果有ans[i]就是a[x];并且按顺序每次遇到f(a[y])相同的数时,记录最大的a[y]。#include <stdio.h>#include <string.h>int main(){ int t; scanf("%d",&t); for(int u=1;u<=t;u++) { int n,q,i,j,a[100100]={0},sumb[100100]={0},b[100100]={0},suma[100100]={0}; int ans[100100]={0}; scanf("%d%d",&n,&q); for(i=1;i<=n;i++) { ans[i]=-1; scanf("%d",&a[i]); int k=a[i]; while(k) { suma[i]=suma[i]+k%10; k=k/10; } if(sumb[suma[i]]>0)ans[i]=sumb[suma[i]]; // 如果suma[i]是第一次出现sumb[suma[i]]为0,则不存在,反之前面会有最大的a[x]存在 if(a[i]>sumb[suma[i]])sumb[suma[i]]=a[i]; //记录最大,为后面做准备 } printf("Case #%d:/n",u); for(i=1;i<=q;i++) { int x; scanf("%d",&x); printf("%d/n",ans[x]); } } return 0;}
新闻热点
疑难解答