hihocoder50

http://hihocoder.com/contest/offers50/problem/ 제목 1: 순환 배열: sum 이 0 보다 크 면 존재 합 니 다. 한 번 훑 어보 면 됩 니 다.
n = int(raw_input())
a = map(int, raw_input().split(' '))
if sum(a)<=0:
    print -1
else:
    res, i, su = 0, 0, a[0]
    while i+1

제목 2: 좌석 문제 우선 대기 열, 정렬 규칙 정의, Python 회 TLE, 아, 자바 다시 써 야 겠 다. C + + 다 까 먹 었 어.
import heapq

n,m,k = map(int, raw_input().strip().split(' '))
b=map(int, raw_input().split(' '))
b.sort()
q=[]
for i in range(m-1):
    if b[i+1]-b[i]>1:
        d = b[i+1]-b[i]-1
        heapq.heappush(q, (-(d/2), -(d+1)//2,b[i]+1,b[i+1]-1))
if b[0]>1:  heapq.heappush(q, (-(b[0]-1)/2, -(b[0])/2, 1, b[0]-1))
if b[-1]0:
    k-=1
    _,_,l,r=heapq.heappop(q)
    mid=(l+r)/2
    heapq.heappush(q, (-(mid-2-l)/2, -(mid-1-l)/2, l, mid-1))
    heapq.heappush(q, (-(r-mid-2)/2, -(r-mid-1)/2, mid+1, r))
    res.append(mid)
print('
'.join(map(str, res)))
package l502;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.PriorityQueue;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n=sc.nextInt(), m=sc.nextInt(), k=sc.nextInt();
        int[] b = new int[m];
        for(int i=0; i pq = new PriorityQueue(n, new Comparator(){
            public int compare(int[] a1, int[] a2) {
                int d1=a1[1]-a1[0], d2=a2[1]-a2[0];
                if((d1+1)/2!=(d2+1)/2) return -(d1+1)/2+(d2+1)/2;
                if((d1+2)/2!=(d2+2)/2) return -(d1+2)/2+(d2+2)/2;
                return a1[0]-a2[0];
            }
        });
        
        for(int i=0; i1) {
                pq.add(new int[]{b[i]+1, b[i+1]-1});
            }
        if(b[0]>1) pq.add(new int[]{1, b[0]-1});
        if(b[m-1] l = new ArrayList();
        while(k-- > 0) {
            int[] t = pq.remove();
            int mid = (t[0]+t[1])/2;
            pq.add(new int[]{t[0], mid-1});
            pq.add(new int[]{mid+1, t[1]});
            l.add(mid);
        }
        
        for(int i:l)
            System.out.println(i);
    }
}

제목 3: 끝 에 최대 0 의 곱 하기 통계 2, 5 의 개수 가 있 고 그 다음 에 DP, 2 와 5 사이 에 관련 이 있 기 때문에 DP 배열 2 개 로 나 누 어 계산 할 수 없습니다. dp [i] [j] [k] 는 i 위치 에 있 을 때 j 개 를 선 택 했 습 니 다. k 개 5 가 있 을 때 최대 몇 개의 2 가 있 습 니까? 사실은 5 의 개 수 를 매 거 했 습 니 다. 곰 곰 이 생각해 보 는 것 도 논리 에 부합 되 기 때문에 이전의 방식 에 얽 매 이지 말고 뛰 어 나 오 세 요.매 거 된 사고방식 에 따라 정상적으로 한 번 고려 하 다
package l503;

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n=sc.nextInt(), m=sc.nextInt();
        int[]a=new int[n];
        for(int i=0;i0 && a[i]%2==0)  {a[i]/=2; a2[i]++;}
            while(a[i]>0 && a[i]%5==0) {a[i]/=5; a5[i]++;}
        }
        
        int s=0;
        for(int i:a5) s+=i;
        
        int[][][] dp = new int[n][m+1][s+1];
        //                 ,           
        for(int[][] dp1: dp) for(int[] dp2: dp1) Arrays.fill(dp2, -99999999);
        dp[0][0][0] = 0;
        for(int k=0; k<=a5[0]; k++) dp[0][1][k]=a2[0];
        for(int i=1; i=0 && k-a5[i]>=0))
                        dp[i][j][k]=Math.max(dp[i][j][k], dp[i-1][j-1][k-a5[i]]+a2[i]);
                }
        
        int res = 0;
        for(int i=0; i

좋은 웹페이지 즐겨찾기