
오래 고민한 문제다..! 이런거 참 생각을 잘 못하는거같다 어떤 화분을 깨면 화분에 해당하는 숫자가 오른쪽에 임의에 화분에 있다면 그 화분도 깰수있다 계속 연속적으로 이어져간다 자 생각을 해보자..! 맨 처음 화분은 무조건 깨야만한다. 안그러면 아무도 깨주지 않으므로..! 그럼 맨 처음 화분에 포함되는 수를 앞으로 만난다면 그 화분도 무조건 깨져야한다 그럼 입력받으면서 처리할 수 있다..! 화분을 깨지는 수를 계속 저장해가며 하나라도 가지고 있으면 깨버리자! 소스는 참 짧다! 처음에는 set을 썼는데 그럼 시간이 너무 오래 걸린다 배열을 이용하자 소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #include using namespace std; #define ll long..

참 어려워 보이는 문제다 근데 생각해보면 쉬운 문제다 물론 long long 안써서 처음에 틀렸다 ㅎㅎ 먼저 우리가 알아야할 x들은 소수라는 점을 기억하자 그럼 c1,c3,c5,c6은 소수 2개의 곱이므로 유일한 수 2개가 있을 것이다. 결국 완탐하면 된다! 이 문제에서 x4랑 x8은 의미없다 쓰지 않는다 완전탐색을 할 때 어떤 수 2개를 곱해서 c가 되야하므로 i*ic1>>c2>>c3>>c4>>c5>>c6; vector x1,x2,x3,x4,x5,x6,x7,x8; solve(c1,x1,x2); solve(c3,x6,x7); solve(c5,x2,x3); solve(c6,x6,x5); for(int a=0;a

수학 공부 열심히 한다는 마음으로 항상 틀리며 공부하고있다 ㅎㅎ 이 문제를 풀 때 혼자 너무 어렵게 접근해서 처음에는 반도 못갔다 코포 끝나고 혼자 풀어보니까 f(a,b) = a&(-b) 로 정리된다는걸 깨달았다 근데 거기서 발전은 못해서 에디토리얼을 봤다 ㅎㅎ 어렵다..!! 결국 a1~an까지 정리하면 a1&(-a2)&(-a3)&(-a4)...&(-an)이 된다는 걸 알 수 있다 그럼 여기서 주목할 건 내가 어떤 2^k 승의 비트를 가지는 수가 1개라면 그걸 a1에 놨을 때 나머지 a2~an까지 -가 붙기 때문에 2^k 위치를 살려준다! 예를들어 2^5 비트가 1인 수가 딱 1개만 있고 그걸 a1에 둔다면 나머지 수들은 2^5가 0이지만 -가 붙어서 1로변하고 a1에 놓인 2^5가 계속 1일 수 있다 ..

이런 수학문제가 참 어려운거같다 나는 한참 생각하고 틀린 문제다 혼자 식을 줄이려고 애썼는데 안떠오른다.. 이 문제는 m이 1000이하인게 힌트다! 먼저 2가지 경우가 있을 수 있다 1. nm인 경우 이 경우를 생각도 못했다. 만약 n>m이라면 어떻게 될까? %m해서 나올 수 있는 값은 총 m개다 근데 m보다 큰 n에 대해 %m을 한다면 비둘기집의 원리에 의해 누군가 하나는 같은게 나올 수 밖에 없다!! 생각도못함..! 같은게있다는말은 빼면 0이된다는 말이고 결국 곱하기 0이 생긴다는거니까 0이다 그냥! 그냥 0..! 수학공부를 다시 해야할까보다.. 소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include using namespace ..