Inversion
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 963 Accepted Submission(s): 614
Problem Description
Give an array A, the index starts from 1.
Now we want to know Bi=maxi∤jAj , i≥2 .
Now we want to know Bi=maxi∤jAj , i≥2 .
Input
The first line of the input gives the number of test cases T; T test cases follow.
Each case begins with one line with one integer n : the size of array A.
Next one line contains n integers, separated by space, ith number is Ai .
Limits
T≤20
2≤n≤100000
1≤Ai≤1000000000
∑n≤700000
Each case begins with one line with one integer n : the size of array A.
Next one line contains n integers, separated by space, ith number is Ai .
Limits
T≤20
2≤n≤100000
1≤Ai≤1000000000
∑n≤700000
Output
For each test case output one line contains n-1 integers, separated by space, ith number is
Bi+1
.
Sample Input
2 4 1 2 3 4 4 1 4 2 3
Sample Output
3 4 3 2 4 4
Source
Recommend
找个结构体,里面存上数值和下标,然后俺数值排序,从最大值开始找就可以了
My ugly code
#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <iostream>
#include <algorithm>
#define ll long long
using namespace std;
int T,N;
int a,b,c,d,e,f,g;
int main(){
scanf("%d",&T);
while(T--){
scanf("%d",&N);
int ans[10];
int kk=0;
for(int i=1;i<=N;i++){
scanf("%d%d%d%d%d%d%d",&a,&b,&c,&d,&e,&f,&g);
ans[0]=d-g;
ans[1]=e-g;
ans[2]=f-g;
ans[3]=a-ans[0]-ans[2]-g;
ans[4]=b-ans[0]-ans[1]-g;
ans[5]=c-ans[1]-ans[2]-g;
ans[6]=g;
if(ans[0] < 0 || ans[1] < 0 || ans[2] < 0 || ans[3] < 0 || ans[4] < 0 || ans[5] < 0 || ans[6] < 0)
continue ;
int tmp=0;
for(int i=0;i<7;i++)
tmp+=ans[i];
kk=max(kk,tmp);
}
printf("%d\n",kk);
}
return 0;
}