Mutiple
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 65 Accepted Submission(s): 45
Problem Description
WLD likes playing with a sequence a[1..N].
One day he is playing with a sequence of N integers.
For every index i, WLD wants to find the smallest index F(i) (
if exists ), that i<F(i)≤n,
and aF(i) mod ai =
0. If there is no such an index F(i),
we set F(i) as
0.
Input
There are Multiple Cases.(At MOST 10)
For each case:
The first line contains one integers N(1≤N≤10000).
The second line contains N integers a1,a2,...,aN(1≤ai≤10000),denoting
the sequence WLD plays with. You can assume that all ai is distinct.
Output
For each case:
Print one integer.It denotes the sum of all F(i) for
all 1≤i<n
Sample Input
4 1 3 2 4
Sample Output
6 Hint F(1)=2 F(2)=0 F(3)=4 F(4)=0
Source
题意:求大于i(1~n-1)小于等于n的中间最小的数的和
代码:
#include <cstdio> #include <algorithm> #include <iostream> #include <cstring> #include <set> #define LL __int64 using namespace std; const LL Mod = 10007; const LL M = 1e4+5; int s[M]; int main(){ int n; while(scanf("%d", &n) == 1){ memset(s, 0, sizeof(s)); for(int i = 1; i <= n; ++ i){ scanf("%d", &s[i]); } int sum = 0; for(int i = 1; i < n; ++ i){ int Min = 1e7; for(int j = i+1; j <= n; ++ j){ if(s[j]%s[i] == 0&&Min > j){ Min = j; } } if(Min != 1e7) sum += Min; } printf("%d\n", sum); } return 0; }