코드 교훈 총결
BFS를 쓸 때 나는 이런 코드를 썼다
while (!que.empty()) {
auto p = que.front();
que.pop();
int d = maze[p.first][p.second]; // maze should be dis
rng (i, 0, 4) {
int x = p.first + dx[i], y = p.second + dy[i];
if (x >= 0 && x < R && y >= 0 && y < C && dis[x][y] > d + 1) {
dis[x][y] = d + 1;
que.emplace(x, y);
}
}
}
그중
int d = maze[p.first][p.second];
은 잘못 썼다.maze
지도를 대표하는 것은 dis
이어야 한다.2019/9/27용
std::next_permutation
으로 전체 배열을 매거할 때 초기 배열이 사전 서열의 가장 작은 배열임을 확보해야 한다.오늘 왕이게임의 교필고사를 한다."""ASDFGH""라는 여섯 글자를 모두 정렬해야 하는 문제가 있습니다."처음에 이렇게 썼어요.
string s = "ASDFGH";
do {
// do something with s
} while (next_permutation(s.begin(), s.end()));
결과는 60퍼센트의 점수만 얻었다.
상술한 코드가 잘못된 점은 모든 배열을 열거하지 않았기 때문이다."ASDFGH"를 처음 배열하는 것은 사전 서열의 가장 작은 배열이 아니다. 이렇게 쓰면 사전 서열이 "ASDFGH"와 같은 모든 배열보다 크다는 것을 열거할 뿐이다.
맞춤법
string s = "ASDFGH";
sort(s.begin(), s.end());
// string s = "ADFGHS";
do {
// do something with s
} while (next_permutation(s.begin(), s.end()));
2019/9/23 호출
std::unique
또는 std::unique_copy
(since C++17) 이전에 반드시 수조가 질서정연하다는 것을 확보해야 한다std::sort
.2018/5/19는 정수로 집합을 표시할 때 i번째 원소가 집합 S에 속하는지 판단할 수 있다
if (S & 1 << i)
또는if (S >> i & 1)
.i번째 원소가 집합 S에 속하지 않는지 판단할 때 나는 보통 if ( (S & 1 << i) == 0 )
을 사용하지만 이렇게 쓰면 나쁜 점이 하나 있다. 바로bitwise and(&
) 산자의 우선순위가 ==
산자보다 낮다는 것을 잊어버리는 것이다.이 문제를 피할 수 있는 두 가지 더 좋은 방법이 있는데 첫 번째는if ( !(S & 1 << i) )
이다. 왜냐하면 나는 !
산자의 우선순위가 매우 높다는 것을 알고 있기 때문이다.두 번째는 if ( ~S & 1 << i )
괄호가 필요 없고 우아한 XD라고 할 수 있지만 다산~S
이라 느리지 않을까요?(현학).Remark:
&
,^
,|
,&&
,||
는 모두 ==
보다 우선순위가 낮다.2018/4/21 WA는 먼저 입력 데이터의 유형이 데이터 범위와 일치하는지 확인해야 합니다.
2018/4/18 어떤 문제에서 다음과 같은 과정을 실현해야 한다.이원조 (
std::pair
의 집합을 유지합니다.pair의 2차원은 unique와const의 ID를 나타냅니다. 1차는 줄어들지 않고, 항상 0달러보다 큽니다.매번 집합에서 1차원이 $0$인pair를 꺼내고 집합에서 삭제하면 이런pair가 존재할 것을 보장합니다. 그리고 집합 중의pair의 1차원을 $1$줄입니다.내 쓰기 방법:
std::set<:pair>>
지원으로 1차원이 $0달러인pairstd::pair::first
의 현재 값을 하나의 배열로 저장합니다.2018/1/1 $m$추출 연산은 반드시 최종 결과가 $0$에서 $m-1$사이임을 보장합니다.
DP: 합법 상태이지만 계산되지 않은 상태를 고려해야 합니다.
2018/1/2 변수명명:
#include
도입 헤드 파일로 prev
,next
두 이름 모두 변수명 충돌을 일으키면 prv
와nxt
로 대체할 수 있다.2018/1/3 남용
for
순환하지 말고while
순환이 적합할 때while
를 사용해야 한다.2018/4/2 "간단한 문제를 복잡하게 만들자", "짧은 코드로 해결할 수 있지만 내 코드는 길다."이런 종류의 잘못은 용인할 수 없다.
2018/4/3 range-for로 용기
a
를 훑어보았을 때 용기의 요소를 수정하려면 for(auto &x: a)
를 사용해야 한다.수정하지 않을 때도 이렇게 사용할 수 있기 때문에range-for를 사용할 때는 항상 인용의 형식을 사용한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.