길을 잃지 않도록 주의하세요. 더 많은 사람들에게 추천하는 것을 환영합니다.
목차
1.1 동기화 취소(시간 절약, 치트 포인트, 모든 프로그램을 작성하는 것이 가장 좋습니다)
1.2 범용 라이브러리(컴파일 시간이 지연될 수 있지만 두뇌를 절약할 수 있음)
1.3 Blue Bridge Cup의 리턴 0을 쓰는 것을 잊지 마십시오! !
트릭 1개
1.1 동기화 취소(시간 절약, 치트 포인트, 모든 프로그램을 작성하는 것이 가장 좋습니다)
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
1.2 범용 라이브러리(컴파일 시간이 지연될 수 있지만 두뇌를 절약할 수 있음)
#include <bits/stdc++.h>
1.3 Blue Bridge Cup의 리턴 0을 쓰는 것을 잊지 마십시오! !
1.4 컴파일 설정(Dev C++)
(1) 도구 -> 컴파일 옵션 -> 컴파일러 -> 컴파일 시 다음 명령어 추가 -> C99로 조정
(2) 도구 -> 컴파일 옵션 -> 코드 생성/최적화 -> 코드 생성 -> 언어 표준
1.5 memset 충전 기능
메모리 블록을 바이트 단위로 초기화합니다. 0 또는 -1만 채울 수 있습니다.
#include <bits/stdc++.h>
using namespace std;
int a[10];
int main()
{
memset(a,-1,sizeof(a));
for(int i=0;i<10;i++)
{
cout<<a[i]<<endl;
}
return 0;
}
1.6 시간 복잡도
블루브릿지컵에서 각 문제의 컴파일 시간은 1초 이내로 제한되어 있으며, 상대적으로 데이터가 많은 문제를 만났을 때 시간 복잡도를 줄여야 하는 경우가 많습니다.
O(n)의 경우 1초에 약 4억회, O(n*n)의 경우 1초에 약 20,000회, O(의 경우 약 700회 완료되는 것으로 대략 추정된다. n*n*n).
블루브릿지컵 평가 시스템은 합격 샘플 수를 기반으로 하기 때문에 질문을 할 때 샘플의 값 범위에 주의를 기울여야 합니다.
예: K-겹 간격(무차별 대입 방법은 일부 샘플만 통과할 수 있으므로 더 나은 알고리즘을 사용해야 함)
1.6.1 상수 차수 O(1)
int i=1;
int j=2;
int m=i+j;
1.6.2 로그 차수 O(logn)
int i=1;
while(i<n)
{
i=i*2;
}
1.6.3 선형차수 O(n)
for(int i=0;i<n;i++)
{
cout<<i<<endl;
)
1.6.4 선형 대수 차수 O(nlogn)
for(int m=1;m<n;m++)
{
int i=1;
while(i<n)
{
i=i*2;
}
}
1.6.5 다중 루프 O(n^k)
k는 루프 레이어의 수입니다.
1.7 가지치기
질문을 할 때 얻을 수 없는 값은 컴퓨터가 계산하지 않도록 하세요. 시간을 절약하세요. 블루브릿지 컵에서 만나는 것들은 너무 번거로운 가지치기를 사용하지 않았고, 대부분 BFS에도 있습니다. 및 DFS.는 (bool vis)에 나타납니다.
1.8 찾기 기능
기능: 배열에서 요소의 첫 번째 발생 주소 찾기(0x의 주소와 유사)
모델: 찾기(시작점 찾기, 끝점 찾기, 대상 요소 찾기)
마찬가지로 검색 구간은 [시작점 찾기, 끝점 찾기]
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a[10]={2,6,8,1,3,7,5,1,0,11};
cout<<find(a+0,a+5,8)<<endl;//打印类似0x地址
cout<<find(a+0,a+5,8)-a<<endl;//打印数组【】内的序号
return 0;
}
1.9 PI 문제
PI=아탄(1.0)*4
2 기본 알고리즘 및 기술
2.1 BFS(폭 우선 탐색)
대기열이 사용됨(가끔 우선순위 대기열이 사용됨)
주요 아이디어: 모든 적격 포인트를 대기열에 넣은 다음 하나씩 팝업하여 대기열이 비워질 때까지 위, 아래, 왼쪽, 오른쪽, 앞뒤로 검색하여 검색이 완료되었음을 의미합니다. 검색 여부 판단에 주의하고 bool vis【】를 사용하여 판단합니다.
예제 주제: 지구 온난화
2.2 DFS(깊이 우선 탐색)
재귀 사용(이해하기 쉽지 않음)
기본 템플릿: 다음 전체 배치 예를 참조하십시오.
요약하면 다음과 같은 단계가 있습니다.
(1) ()가 반환되면 경계를 결정합니다.
(2) for 루프를 입력합니다.
(3) if (vis[]) vis[]=true; dfs(); vis[]=false;
예: 계산 공식
2.3 최대공약수와 최소공배수
최대 공약수 (gcd)
#include <bits/stdc++.h>
using namespace std;
int main()
{
cout<<__gcd(25,5);
return 0;
}
최소공배수(lcm)
lcm 함수를 하나 더 작성하십시오.
#include <bits/stdc++.h>
using namespace std;
int lcm(int a,int b)
{
return a*b/__gcd(a,b);
}
int main()
{
cout<<lcm(25,5);
return 0;
}
2.4 이진 변환
2.4.1 매체로서의 십진법(공통형)
2.4.2 매체로서의 바이너리(트릭 유형)
2.5 이진 표현
예: 지루하다 웃기다
2.6 배낭 문제
2.6.1 01 배낭 문제
#include<bits/stdc++.h>
using namespace std;
int v[1000]; // 体积
int w[1000]; // 价值
int f[1000][1000]; // f[i][j], j体积下前i个物品的最大价值
int main()
{
int n, m;
cin >> n >> m;
for(int i = 1; i <= n; i++)
cin >> v[i] >> w[i];
for(int i = 1; i <= n; i++)
for(int j = 1; j <= m; j++)
{
// 当前背包容量装不进第i个物品,则价值等于前i-1个物品
if(j < v[i])
f[i][j] = f[i - 1][j];
// 能装,需进行决策是否选择第i个物品
else
f[i][j] = max(f[i - 1][j], f[i - 1][j - v[i]] + w[i]);
}
cout << f[n][m] << endl;
return 0;
}
2.6.2 다중 배낭 문제(각 항목의 여러 항목)
여러 항목을 새로운 항목으로 반죽하고 일련 번호에 따라 쌓아 두십시오.
2.6.3 완전한 배낭 문제(각 항목의 무한 개수)
#include<iostream>
using namespace std;
const int N = 1010;
int f[N];
int v[N],w[N];
int main()
{
int n,m;
cin>>n>>m;
for(int i = 1 ; i <= n ;i ++)
{
cin>>v[i]>>w[i];
}
for(int i = 1 ; i<=n ;i++)
for(int j = v[i] ; j<=m ;j++)
{
f[j] = max(f[j],f[j-v[i]]+w[i]);
}
cout<<f[m]<<endl;
}
2.7 동적 프로그래밍(DP)
예: 금화 가져가기
2.8 탐욕
아이디어: 로컬 최적 솔루션을 선택하지만 경우에 따라 적용되지 않는 것이 가장 큰 결함입니다.
예: 지폐 문제
예를 들어 1위안, 2위안, 5위안, 10위안, 20위안, 50위안, 100위안의 액면가가 있는데 110위안을 욕심내어 가장 큰 액면가인 100위안부터 찾을 수 있습니다.
그러나 지폐의 액면가를 1위안, 2위안, 5위안, 20위안, 55위안, 100위안 등으로 바꾸면 그리디 알고리즘을 사용하면 최적의 솔루션을 찾을 수 없다는 것을 알게 됩니다(그리디: 100+5+5= 110 동적 프로그래밍: 55+55=110)
2.9 분할 정복(나중에 업데이트됨)
대부분 이분법적
2.10 숫자를 배열로 나누기
(2 메시지) 숫자를 분할하여 배열로 저장(C/C++ ) .3001.5501
2.11 숫자와 문자열의 상호화
하위 번호를 찾을 수 없지만 하위 문자열은 찾을 수 있습니다.
예: 초소수
2.12 정렬
3 STL
3.1 대기열(대기열)
3.2 연결 리스트(리스트)
3.3 우선순위 큐(priority queue)
우선 순위 큐는 기본적으로 큰 루트 힙(큰 것에서 작은 것 순으로)으로 설정되어 있습니다. 작은 것에서 큰 것 순으로 정렬하려면
<int, vector<int>, greater<int> >//오름차순 정렬(작은 루트 힙)
<int,vector<int>,less<int> >//내림차순으로 정렬(큰 루트 힙)
3.4 벡터/동적 배열(벡터)
3.5 스택(스택)
3.6 컬렉션(집합) (반복되는 요소가 필요하지 않음)
set<int> s;//기본 오름차순
set<int, greater<int>> s2 = {3,2,5,1,4 ,3};//降序
설정값 수정 불가(수정 후 데이터 순서를 보장할 수 없음)
3.7 컬렉션/맵/키-값 쌍(맵)
3.8 반복자
주형:
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> v;
v.push_back(11);
v.push_back(7);
vector<int>::iterator it = v.begin();
while(it!=v.end())
{
cout << *it <<" ";
it++;
}
cout << endl;
return 0;
}
다음은 Blue Bridge Cup에 참가하기 위해 마스터해야 하는 지식 포인트 및 기술에 대한 일반적인 목록입니다. 특정 지식 포인트에 대해 더 알고 싶다면 내 샘플 질문 및 다른 사람들의 기사를 읽을 수 있습니다.