xcpc-jiangly-style

Use when writing C++ competitive programming solutions for Codeforces, ICPC, or similar contests. Apply when creating XCPC solutions to ensure code follows jiangly's proven style patterns.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "xcpc-jiangly-style" with this command: npx skills add lihaoze123/my-skills/lihaoze123-my-skills-xcpc-jiangly-style

XCPC: jiangly C++ Style

Overview

Proven C++ coding style from jiangly's Codeforces submissions. Focuses on safety, maintainability, and modern C++ features for competitive programming.

Core principle: Zero global pollution, zero global arrays, explicit types, modern C++.

When to Use

  • Writing C++ solutions for Codeforces, ICPC, AtCoder, etc.
  • Creating competitive programming templates
  • Reviewing contest solutions
  • Teaching competitive programming best practices

Don't use for:

  • Production C++ code (different requirements)
  • Non-competitive programming projects

<IMPORTANT>

MANDATORY WORKFLOW - READ BEFORE WRITING CODE

This skill enforces strict adherence to jiangly's coding style. You MUST follow this workflow:

Step 1: Consult Rules Before Writing

Before writing ANY code, you MUST:

  1. Read the relevant rule files in rules/ directory based on your task
  2. Check Red Flags table below to avoid common mistakes
  3. Reference examples from rule files - they are the source of truth

Step 2: Match Rule Requirements

For each code decision, verify against rules:

TaskRule FileKey Points
Variable namingrules/naming.mdsnake_case, uppercase for temp count arrays (S, T)
String operationsrules/in-place-operations.mdreserve(), swap() for reuse
Temporary arraysrules/scope-control.mdBlock scopes {}, timely release
Logical operatorsrules/formatting.mdUse and, or, not keywords
Loop comparisonsrules/minimal-code.mdSymmetric patterns: s[i] <= t[j]
Memory usagerules/in-place-operations.mdvis arrays, no duplicate containers
Function designrules/struct-patterns.mdConstructors, const correctness

Step 3: Verify Against Red Flags

Before finalizing code, check EVERY row in the Red Flags table below.

If any pattern matches, you MUST fix it before output.

Step 4: Self-Correction Checklist

After writing code, verify:

  • No using namespace std;
  • No global arrays (all in solve())
  • Used using i64 = long long;
  • Used and/or/not instead of &&/||/!
  • Used std:: prefix everywhere
  • 4-space indentation, K&R braces
  • No line compression (one statement per line)
  • Used "\n" not std::endl
  • Large temporary arrays in block scopes {}
  • Strings preallocated with reserve() when size known
  • Used swap() for O(1) variable reuse
  • Used push_back() for single characters, not +=
  • Symmetric comparison patterns (a[i] <= b[j])
  • Uppercase names for temporary count arrays (S, T)
  • Use iota + lambda for index-value sorting, not structs
  • Loop variables initialized in for header when possible
  • Output uses " \n"[i == n - 1] for space-separated values

Rule Files are PRIMARY Reference

The Quick Reference table below is a summary. Rule files contain the complete, authoritative examples. When in doubt, read the rule file.

</IMPORTANT>
CategoryRuleFile
NamespaceNever using namespace std;no-global-namespace
ArraysZero global arrayszero-global-arrays
TypesUse using i64 = long long;explicit-types
IndexingFollow problem's natural indexingkeep-indexing-consistent
I/ODisable sync, use \nfast-io
Namingsnake_case for vars, PascalCase for structsnaming
MinimalAvoid unnecessary variables, merge conditionsminimal-code
Formatting4-space indent, K&R braces, no line compressionformatting
SimplicityPrefer simple data structuressimplicity-first
MemoryUse in-place operationsin-place-operations
ScopeUse block scopes for temporariesscope-control
DFSUse depth array, avoid parent parameterdfs-techniques
RecursionLambda + self patternrecursion
StructsConstructor patterns, const correctnessstruct-patterns
OperatorsOverload patterns for custom typesoperator-overloading
Helperschmax, ceilDiv, gcd, power, etc.helper-functions
DPUse vector, never memsetdp-patterns
Modern C++CTAD, structured binding, C++20 featuresmodern-cpp-features

Code Template

#include <bits/stdc++.h>

using i64 = long long;

void solve() {
    int n;
    std::cin >> n;

    std::vector<int> a(n);
    for (int i = 0; i < n; i++) {
        std::cin >> a[i];
    }

    std::cout << ans << "\n";
}

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);

    int t;
    std::cin >> t;

    while (t--) {
        solve();
    }

    return 0;
}

Red Flags - STOP

Anti-patternCorrect approach
using namespace std;Use std:: prefix
int a[100005]; globalstd::vector<int> a(n); in solve()
#define int long longusing i64 = long long;
for (int i = 1; i <= n; i++)for (int i = 0; i < n; i++) OR keep problem's indexing
void dfs(int u, int p) globalLambda with self capture
std::endlUse "\n"
if (x) do_something();Always use braces
a && b logical operatorsUse and, or, not keywords
Over-engineered HLD + segment treeUse binary lifting for simple path queries
Creating e1, e2 containersUse vis boolean array
Converting 1-indexed to 0-indexedKeep original indexing
Expanding boolean logic into verbose if-elseMerge conditions
Introducing unnecessary intermediate variablesUse direct formulas
Over-semantic local variable namesUse x, y, l, r for short-lived vars
Passing parent in DFSUse depth array to check visited
Explicit template parametersUse CTAD where possible
Large arrays at function scopeUse block scopes {} for temporaries
String without reserve()Preallocate for known size
Variable assignment instead of swap()Use O(1) swap
Creating struct for simple index-value sortUse std::iota + lambda
Loop variable initialized outside forInitialize in for header: for (int i = 0, j = 0; ...)
Output with trailing space handlingUse " \n"[i == n - 1] trick

Full Documentation

For complete details on all rules: AGENTS.md


<CRITICAL>

FINAL CHECKPOINT - BEFORE OUTPUTTING CODE

You MUST verify ALL items below before showing code to user:

□ Read relevant rule files (naming.md, formatting.md, etc.)
□ Checked against Red Flags table
□ No `using namespace std;`
□ No global arrays
□ Used `i64` for long long
□ Used `and`/`or`/`not` keywords
□ Used `std::` prefix throughout
□ 4-space indent, K&R braces
□ No compressed lines
□ Used `"\n"` not `std::endl`
□ Temporary arrays in block scopes
□ String operations use `reserve()` and `swap()`
□ Symmetric comparison patterns
□ Uppercase temp array names (S, T)
□ Use iota + lambda for sorting with indices
□ Loop vars in for header when scope permits
□ Output uses " \n"[i == n - 1] trick

If ANY item fails, fix before output. This is non-negotiable.

</CRITICAL>

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

nixos-best-practices

No summary provided by upstream source.

Repository SourceNeeds Review
General

nix-packaging-best-practices

No summary provided by upstream source.

Repository SourceNeeds Review
General

writing-best-practices

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

codex-claude-loop

No summary provided by upstream source.

Repository SourceNeeds Review