1002
typedef long long LL; const int maxn = 100000 ; vector<int> d[maxn+8] ; vector<int> ::iterator it ; int a[maxn] ; int f[maxn] ; int b[maxn] ; int g[maxn] ; int c[maxn] ; int main(){ int i , j ; for(i = 1 ; i <= maxn ; i++) for(j = i ; j <= maxn ; j += i) d[j].push_back(i) ; int n ; while(cin>>n && n){ for(i = 1 ; i <= n ; i++) scanf("%d" , &a[i]) ; for(i = 1 ; i <= maxn ; i++) f[i] = -1 ; for(i = 1 ; i <= n ; i++){ if(f[a[i]] == -1) b[i] = a[i] ; else b[i] = a[f[a[i]]] ; for(it = d[a[i]].begin() ; it != d[a[i]].end() ; it++) f[*it] = max(f[*it] , i) ; } for(i = 1 ; i <= maxn ; i++) g[i] = maxn + 10 ; for(i = n ; i >= 1 ; i--){ if(g[a[i]] == maxn + 10) c[i] = a[i] ; else c[i] = a[g[a[i]]] ; for(it = d[a[i]].begin() ; it != d[a[i]].end() ; it++) g[*it] = min(g[*it] , i) ; } LL ans = 0 ; for(i = 1 ; i <= n ; i++){ // cout<<b[i] << " "<<c[i]<<endl ; ans += (LL)b[i] * (LL) c[i] ; } printf("%I64d\n" , ans) ; } return 0 ; }
1006
const int maxn = 1008 ; int n , k ; struct Mat{ int x[10][10] ; Mat(){ memset(x , 0 , sizeof(x)) ; } Mat(int){ memset(x, 0 , sizeof(x)) ; for(int i = 1 ; i <= k ; i++) x[i][i] = 1 ; } friend Mat operator * (const Mat &a , const Mat &b) ; friend Mat operator ^ (Mat a , int b) ; }; Mat operator * (const Mat &a , const Mat &b){ Mat s ; int i , j , d ; for(i = 1 ; i <= k ; i++){ for(j = 1 ; j <= k ; j++){ if(a.x[i][j] == 0) continue ; for(d = 1 ; d <= k ; d++){ s.x[i][d] += a.x[i][j] * b.x[j][d] ; while(s.x[i][d] >= 6) s.x[i][d] -= 6 ; } } } return s ; } Mat operator ^ (Mat a , int b){ Mat s(1); int i , j , d ; for(; b ; b >>= 1){ if(b & 1) s = s * a ; a = a * a ; } return s ; } int a[maxn][maxn] , b[maxn][maxn] ; int ac[maxn][maxn] , acb[maxn][maxn] ; int main(){ int i , j , d ; while(scanf("%d%d" ,&n,&k)){ if(n==0 && k==0) break ; for(i = 1 ; i <= n ; i++) for(j = 1 ; j <= k ; j++) scanf("%d" ,&a[i][j]) ; for(i = 1 ; i <= k ; i++) for(j = 1 ; j <= n ; j++) scanf("%d" ,&b[i][j]) ; Mat c ; for(i = 1 ; i <= k ; i++){ for(j = 1 ; j <= n ; j++){ if(b[i][j] == 0) continue ; for(d = 1 ; d <= k ; d++){ c.x[i][d] += b[i][j] * a[j][d] ; while(c.x[i][d] >= 6) c.x[i][d] -= 6 ; } } } c = c ^ (n*n-1) ; memset(ac , 0 , sizeof(ac)) ; for(i = 1 ; i <= n ; i++){ for(j = 1 ; j <= k ; j++){ if(a[i][j] == 0) continue ; for(d = 1 ; d <= k ; d++){ ac[i][d] += a[i][j] * c.x[j][d] ; while(ac[i][d] >= 6) ac[i][d] -= 6 ; } } } memset(acb , 0 , sizeof(acb)) ; for(i = 1 ; i <= n ; i++){ for(j = 1 ; j <= k ; j++){ if(ac[i][j] == 0) continue ; for(d = 1 ; d <= n ; d++){ acb[i][d] += ac[i][j] * b[j][d] ; while(acb[i][d] >= 6) acb[i][d] -= 6 ; } } } int sum = 0 ; for(i = 1 ; i <= n ; i++) for(j = 1 ; j <= n ; j++) sum += acb[i][j] ; printf("%d\n" , sum) ; } return 0 ; }
1009
int main(){ int p , n , t , a , b , c , d , e ; double cmax , cmin , g ; cin>>t ; while(t--){ cin>>p>>n ; cmin = 1000.0 ; cmax = -1000.0 ; p *= n ; for(a = 0 ; a <= n ; a++) for(b = 0 ; b <= n ; b++) for(c = 0 ; c <= n ; c++) for(d = 0 ; d <= n ; d++) for(e = 0 ; e <= n ; e++){ if(a + b + c + d + e == n && 85*a + 80*b + 75*c + 70*d + 60*e <= p && 100*a + 84*b + 79*c + 74*d + 69*e >= p){ g = (4.0*a + 3.5*b + 3.0*c + 2.5*d + 2.0*e) / n ; cmin = min(cmin , g) ; cmax = max(cmax , g) ; } } printf("%.4lf %.4lf\n" , cmin , cmax) ; } return 0 ; }
1011
typedef long long LL; const int maxn = 100008 ; int n ; LL c[maxn] , cnt[maxn] ; inline int lowb(int x){ return x & (-x) ; } void into(int i , LL d){ for(; i <= n ; i += lowb(i)) c[i] += d ; } LL sum(int i){ LL t = 0 ; for( ; i >= 1 ; i -= lowb(i)) t += c[i] ; return t ; } int main(){ int m , i ,j , l , r , t , k ; LL h , d ; while(cin>>n&&n){ fill(c , c+n+1 , 0) ; scanf("%d" , &m) ; while(m--){ scanf("%d%d%I64d" , &l ,&r ,&d) ; into(l , d) ; into(r+1 , -d) ; } fill(cnt , cnt+n+2 , 0) ; for(i = n ; i >= 1 ; i--) cnt[i] += cnt[i+1] + sum(i) ; scanf("%d" , &k) ; t = 0 ; while(k--){ scanf("%I64d%d",&h , &i) ; if(cnt[i] < h) t++ ; } printf("%d\n" , t) ; } return 0; }