블루 브릿지 컵의 수년에 걸친 토픽 컬럼입니다. 업데이트 될 예정이며 지난 몇 년간의 실제 질문과 답변을 공개 할 예정입니다. 친구에게 관심을 가져 주셔서 감사합니다. 당신의 좋아요와 관심은 저에게 최고의 동기입니다! ! !
매일 하나의 실제 질문을 업데이트하므로 계속 지켜봐주십시오.
목차
첫 번째 문제 : 방정식의 정수 솔루션
제목 설명
방정식 : a ^ 2 + b ^ 2 + c ^ 2 = 1000
(또는 [그림 1.jpg] 참조)
이 방정식에 정수 솔루션이 있습니까? a, b, c = 6,8,30은 일련의 솔루션입니다.
다른 적합한 솔루션을 계산할 수 있습니까?
솔루션에서 가장 작은 숫자를 입력하십시오.
주제 분석
주제 코드
질문 2 : 은하 폭탄
제목 설명
우주의 도로 표지판으로 사용되는 X 은하의 광대 한 공간에 떠 다니는 X 별 인공 "폭탄"이 많이 있습니다.
각 폭탄은 며칠 안에 폭발하도록 설정할 수 있습니다.
예를 들어 알파 폭탄이 2015 년 1 월 1 일에 배치되고 시간이 15 일이면 2015 년 1 월 16 일에 폭발합니다.
2014 년 11 월 9 일에 1,000 일의 타이밍으로 설치된 베타 폭탄이 있습니다. 정확한 폭발 날짜를 계산해주세요.
날짜를 입력하세요. 형식은 yyyy-mm-dd로 4 자리 연도, 2 자리 월, 2 자리 날짜입니다. 예 : 2015-02-19
형식에 따라 엄격하게 작성하십시오. 다른 단어 나 기호는 나타날 수 없습니다.
주제 분석
주제 코드
질문 3 : 멋진 숫자
제목 설명
Xiao Ming이 이상한 번호를 찾았습니다. 정사각형과 정육면체는 0에서 9까지 10 개의 숫자를 각각 사용하며 한 번만 사용합니다.
이 숫자가 무엇인지 짐작할 수 있습니까?
주제 분석
주제 코드
네 번째 질문 : 그리드의 출력
제목 설명
StringInGrid 함수는 지정된 크기의 그리드에 지정된 문자열을 인쇄합니다.
스트링은 수평 및 수직 방향의 중앙에 있어야합니다.
문자열이 너무 길면 잘립니다.
정확히 중앙에 맞출 수없는 경우 약간 왼쪽이나 위로 이동할 수 있습니다.
다음 프로그램은이 로직을 구현합니다. 밑줄이 그어진 부분에 누락 된 코드를 입력하십시오.
#include <stdio.h>
#include <string.h>
void StringInGrid(int width, int height, const char* s)
{
int i,k;
char buf[1000];
strcpy(buf, s);
if(strlen(s)>width-2) buf[width-2]=0;
printf("+");
for(i=0;i<width-2;i++) printf("-");
printf("+\n");
for(k=1; k<(height-1)/2;k++){
printf("|");
for(i=0;i<width-2;i++) printf(" ");
printf("|\n");
}
printf("|");
printf("%*s%s%*s",_____________________________________________); //填空
printf("|\n");
for(k=(height-1)/2+1; k<height-1; k++){
printf("|");
for(i=0;i<width-2;i++) printf(" ");
printf("|\n");
}
printf("+");
for(i=0;i<width-2;i++) printf("-");
printf("+\n");
}
int main()
{
StringInGrid(20,6,"abcd1234");
return 0;
}
제목에있는 데이터의 경우 다음과 같이 출력되어야합니다.
± ----------------- +
| |
| abcd1234 |
| |
| |
± ---------- --- ---- +
(정렬 문제가있는 경우 [그림 1.jpg] 참조)
문제 분석을
위한 질문 코드
질문 5 : 9 개의 그룹 점수
제목 설명
1,2,3 ... 9이 9 개의 숫자는 점수를 형성하며 그 값은 정확히 1/3입니다. 그룹화 방법은?
다음 프로그램은이 기능을 구현합니다. 밑줄이 그어진 부분에 누락 된 코드를 입력하십시오.
#include <stdio.h>
void test(int x[])
{
int a = x[0]*1000 + x[1]*100 + x[2]*10 + x[3];
int b = x[4]*10000 + x[5]*1000 + x[6]*100 + x[7]*10 + x[8];
if(a*3==b) printf("%d / %d\n", a, b);
}
void f(int x[], int k)
{
int i,t;
if(k>=9){
test(x);
return;
}
for(i=k; i<9; i++){
{
t=x[k]; x[k]=x[i]; x[i]=t;}
f(x,k+1);
_____________________________________________ // 填空处
}
}
int main()
{
int x[] = {
1,2,3,4,5,6,7,8,9};
f(x,0);
return 0;
}
주제 분석
주제 코드
질문 6 : 카드 유형 수
제목 설명
Xiao Ming은 카지노 X에 납치되어 다른 3 명과 카드를 플레이해야했습니다.
카드 한 벌 (크고 작은 트럼프 카드 제외, 총 52 장), 각 카드 13 장씩 4 명에게 균등하게 분배됩니다.
이때 갑자기 샤오밍의 머릿속에 질문이 떠올랐다.
만약 당신이 수트 만 고려하지 않고, 당신이 얻는 카드의 순서를 고려하지 않는다면, 당신은 몇 가지 종류의 초기 카드 조합을 손에 넣을 수 있습니까?
주제 분석
주제 코드
질문 7 : 팔찌 스타일
제목 설명
Xiao Ming에는 붉은 산호 3 개, 흰색 산호 4 개, 노란색 마노 5 개가 있습니다.
그는 여자 친구에게 줄 팔찌로 원형으로 사용하고 싶었습니다.
이제 Xiao Ming은 알고 싶어합니다. 팔찌를 마음대로 돌리거나 뒤집을 수 있다고 생각한다면 얼마나 많은 조합이있을 수 있습니까?
주제 분석
주제 코드
질문 8 : 음료 사용
주제 설명
러 양양 음료 공장은 판촉 활동을하고 있습니다. 러 양양 C 형 음료는 3 개의 캡으로 다른 C 형 음료 한 병을 교체 할 수 있으며 영구적으로 재활용 할 수 있습니다 (단, 임시 대출 또는 크레딧은 허용되지 않음).
Xiao Ming이 병 뚜껑을 낭비하지 않고 가능한 한 많은 활동에 참여한다면 그가 처음에 구입 한 n 개의 음료수에 대해 결국 몇 병의 음료수를 마실 수 있는지 계산하십시오.
입력 : 구매할 음료수를 나타내는 정수 n (0 <n <10000)
출력 : 실제로 획득 한 음료수를 나타내는 정수
예 :
사용자 입력 :
100
프로그램은 다음을 출력해야합니다.
149
사용자 입력 :
101
프로그램은 다음을 출력해야합니다.
151
리소스 계약 :
최대 메모리 소비 <256M
CPU 소비 <1000ms
질문 분석
질문 코드
질문 9 : 기본 주사위
제목 설명
도박 ATM은 말년에 주사위에 집착했습니다. 즉, 주사위를 구부러지지 않고 정사각형 원통을 형성하기 위해 다른 위에 놓는 것입니다.
장기간의 관찰 끝에 ATM은 안정적인 주사위의 수수께끼를 발견했습니다. 일부 숫자의 얼굴은 서로를 밀어 낼 것입니다!
먼저 주사위를 표준화 해 보겠습니다. 1의 반대는 4, 2의 반대는 5, 3의 반대는 6입니다.
m 개의 상호 배제 그룹이 있다고 가정하면 각 그룹의 두 숫자의 얼굴이 서로 가깝고 주사위가 안정적으로 일 어설 수 없습니다.
Atm은 주사위를 만드는 데 가능한 여러 가지 방법을 계산하려고합니다.
주사위를 만드는 두 가지 방법은 두 가지 방법으로 해당 높이의 주사위 숫자의 방향이 동일한 경우에만 동일합니다.
너무 많은 솔루션이있을 수 있으므로 10 ^ 9 + 7 모듈로 결과를 출력하십시오.
ATM의 주사위 수를 과소 평가하지 마세요 ~
"입력 형식" 의
첫 번째 줄에있는 두 개의 정수 nm
n은 주사위의 수를 나타냅니다.
다음 m 줄에는 각 줄에 두 개의 정수 ab가있어 숫자 a와 b가 서로 가까울 수 없음을 나타냅니다.
"출력 형식"은
한 줄에 숫자가 있으며 이는 10 ^ 9 + 7 모듈로 답을 의미합니다.
"샘플 입력"
2 1
1 2
"샘플 출력"
544
데이터
30 %의 "데이터 범위" :
60 %에 대한 n <= 5 데이터 : n <= 100
~ 100 % 데이터 : 0 <n <= 10 ^ 9, m <= 36
제목 분석
제목 코드
질문 10 : 재해 후 재건
제목은
Pear City에 N (<= 50000) 주거 지역이 있고 주거 지역 사이에 M (<= 200000) 양방향 도로가 연결되어 있음을 설명합니다. 이 두 정착지는 양방향 도로를 통해 도달 할 수 있습니다. 이 상황은 최근까지도 계속되었으며, 심각한 지진으로 M 도로가 모두 파괴되었습니다.
지진 후 Pear는 이러한 도로 중 일부를 수리 할 계획이며 i 번째 도로를 수리하려면 Pi의 시간이 걸립니다. 그러나 Pear는 모든 점을 연결하려는 것이 아니라 특별히 레이블이 지정된 일부 점을 선택하여 연결합니다.
Pear는 Q (<= 50000) 쿼리를 가지고 있습니다. 그가 요청할 때마다 숫자가 [l, r] 사이이고 숫자가 mod K = C 인 모든 점을 선택하고 일부 경로를 복구하여 연결되도록합니다. 모든 도로 수리가 동시에 시작될 수 있기 때문에 수리 완료 시간은 가장 오랜 시간이 걸리는 도로, 즉 관련 도로 중 Pi의 최대 값에 따라 다릅니다.
Pear가 각 문의에 필요한 최소 시간을 계산하도록 도와 줄 수 있습니까? 여기서 조회는 독립적입니다. 즉, 이전 조회의 수리 계획이 실행되지 않았습니다.
[입력 형식]
첫 번째 줄에있는 세 개의 양의 정수 N, M, Q는 제목에 설명 된 의미를 갖습니다.
다음 M 라인에서 각 라인에는 Xi와 Yi를 연결하는 양방향 도로를 나타내는 세 개의 양의 정수 Xi, Yi, Pi가 있으며 Pi를 수리하는 데 시간이 걸립니다. 자체 루프가있을 수 있고 가장자리가 무거울 수 있습니다. 1 <= Pi <= 1000000.
다음 줄 Q에는 각 줄에 4 개의 양의 정수 Li, Ri, Ki, Ci가 있습니다. 이는 이번에 문제의 지점이 숫자 Mod Ki = Ci 인 구간 [Li, Ri]의 모든 지점임을 나타냅니다. 문의와 관련된 점이 두 개 이상 있는지 확인하십시오.
[출력 형식]
출력 Q 라인, 각 라인 양의 정수는 해당 문의에 대한 답변을 나타냅니다.
[샘플 입력]
7 10 4
1 3 10
2 6 9
4 1 5
3 7 4
3 6 9
1 5 8
2 7 4
3 2
1017 6
7 6 9
1 7
1 7 3 1
2 5 10
3 7 2 1
[샘플 출력]
9
6
8
8
[데이터 범위]
20 % 데이터의 경우 N, M, Q <= 30
40 % 데이터의 경우 N, M, Q <= 2000
100 % 데이터의 경우 N <= 50000, M <= 2 * 10 ^ 5, Q <= 50000. Pi <= 10 ^ 6. Li, Ri, Ki는 모두 [1, N] 범위에 있고 Ci는 [0, Ki에 해당함) 범위에 있습니다.
주제 분석
주제 코드