문제를 읽어보면 그냥 BFS+시뮬레이션으로 풀면 될거같다 심지어 크기도 작다!! 악마->수연 이 순서대로 보내면 수연이가 갈 수 있는곳의 최단거리를 BFS로 구할 수 있다! 큐를 2개만들고 악마큐를 먼저 실행시키고, 수연이큐를 실행시키자 악마가 다음칸으로 갈 수 있는 조건은 .이거나 S이거나이고 수연이가 갈수있는 조건은 .이거나 D이다! 악마가 방문할때마다 *로 바꿔주고 수연이가 방문할때마다 S로 바꿔주면 답이 착하게 나온다!! 소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 5..
풀려고 생각하다가 끝난 문제였다 한시간이 넘도록 생각해도 못풀었다 ㅎㅎ 수학적 머리가 없는건가 우선 f,g 계수들의 gcd가 1이기 때문에 어딘가 p로 안나눠떨어지는 수가 하나씩은 나온다! f에서 그위치를 i / g에서는 j라고 해보자 f*g=h일때 h의 계수를 생각해보면 h^(i+j)의 계수는 f와g의 index합이 i+j인것들의 합이다 이 때 fi*gj도 포함되는데 이 수는 각각 p로 안나눠지므로 두 수의곱도 당연히 안나눠진다! 그래서 답은 그냥 안나눠지는 위치 두개를 찾아서 더하면 된다 수학적으로 증명해서 알려주면 참 쉬워보이는데 시간안에 어케해야할까 이걸..!! 수학은 어렵다..! 소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #include using nam..
메모리와 시간 때문에 많이 틀린 문제다 풀긴했지만 고칠 부분이 많은 코드같다..! 우선 문제를 보면 결국 딸 이름은 n+m-1의 길이를 가질것이다 그럼 시작점부터 해서 가중치가 제일 작은것만 골라서 끝점까지 가면 된다! 다익스트라! 사용하자 각 자리의 알파벳을 가중치라 생각하고 이름을 찾아가다가 n+m-1 길이의 이름을 찾으면 break를하자! 여기서 break안하면 pq에 너무 많이들어가서 메모리가 터진다 소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 #include u..
시간이 충분한 문제다 내가 0일 때 그리고 1일 때 경우를 나눠서 생각하면 된다 먼저 모양의 수는 어떻게 정할까? 유니온 파인드를 이용하면 쉽게 찾을 수 있다 merge할 때마다 해당 부모의 수도 합치면 된다 그렇게 미리 크기를 구해두고 모든 정점에서 만약 해당 정점이 1이면 해당 부모의 크기 0이면 4방향 부모의 합+ 1=>(나를 1로바꿨을때) 을 하면서 최댓값을 찾아보자! 소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 6..