ARC lessons learned4 - zettsu-t/zettsu-t.github.io GitHub Wiki
ARC Div.2ã«ratedã§åå ããŠããŸãããARC 198ã§ç·ã«ãªã£ãã®ã§ratedã§ã¯ãªããªããŸããã
ARC ratedååå ã ã£ããA,B 2å®ã42:34ããŒããã§ãåã®éããã©ã§ããã
ã³ãŒãã¯ãã¡ã
äž¡è
ã®å
šã«ãŒãã®åã¯
-
$S mod M = 0$ ãªããBobã¯æåŸã®äžæãåŒããããã®ã§Aliceã®åã¡ã§ãã -
$S mod M > N$ ãªããAliceã¯æåŸã«$1..N < M$ ãåºããBobã¯æåŸã®äžæãåŒããããã®ã§Aliceã®åã¡ã§ãã - ãã以å€
$0 < S mod M \leq N$ ãªããBobã¯æåŸã«$1..N$ ãåºãããããã®åã«ã«ãŒãåºãAliceã¯å Žã®ã«ãŒãã®åã$M$ ã®åæ°ã«ãªããããåŸãªãããã£ãŠBobã®åã¡ã§ããã
ã³ã³ãã¹ãäžã®æèã®éçšã远ãã
- Grundyæ°ããšæã£ããããã®ã²ãŒã ã¯å¯èœæããããå€ãã
-
$1..N < M$ ãããå Žã®ã«ãŒãã®åã$M$ ã®åæ°ã«ãªã=è² ãããããªæãã»ãŒç¢ºå®ã«åé¿ã§ãããå ¬åŒè§£èª¬ãèªãã§åèªèããããã«ãŒãã¯ããããç°ãªãã®ã§ææã2æä»¥äžããã°ç¢ºå®ã«è² ããåé¿ã§ããã - æåŸã®1ã¿ãŒã³ã¯åºãã«ãŒãã«éžæè¢ããªãæã§ãããããã§åæã決ãŸãã ããã
- åŸæãè©°ãäžã€ã®ç¶æ³ã¯ããã¹ãŠã®ã«ãŒããåºåã£ããšãã§ã
$N(N+1) mod M = 0$ ã§ããã - åŸæãæåŸã«åºãã«ãŒãã
$S \in 1..N$ ãšããã$N(N+1) - S mod M = 0$ ãªãåŸæãã«ãŒããåºãåã«ãå æã¯å Žã®ã«ãŒãã®åã$M$ ã®åæ°ã«ãªããããåŸãªããæ¡ä»¶ãèšãæãããšã$N(N+1) mod M \in 1..N$ ã§ããã - åæ§ã®è°è«ãããäžèšã§ãªããã°ãå æã¯è² ããåŸæãè² ããã
äžèšããŸãšãããšã Bob
ãããã§ãªããã° Alice
ã çã ã§ããã
ä»åã¯çè©°ãã§æåºããããã²ãŒã æšãæ§ç¯ããŠè§£ãæšæž¬ããããšãã§ããã
// 0 means the first player wins
Num visit_dfs(std::vector<Set>& hands, Num turn, Num accum, Num m) {
const auto other = 1 - turn;
if (hands.at(turn).empty()) {
return other;
}
if (hands.at(turn).size() == 1) {
const auto s = accum + *hands.at(turn).begin();
return ((s % m) == 0) ? other : turn;
}
Vec vs;
for(const auto& x : hands.at(turn)) {
vs.push_back(x);
}
for(const auto& x : vs) {
const auto s = accum + x;
if ((s % m) == 0) {
continue;
}
hands.at(turn).erase(x);
const auto result = visit_dfs(hands, other, s, m);
hands.at(turn).insert(x);
if (turn == result) {
return turn;
}
}
return other;
}
void solve(std::istream& is, std::ostream& os) {
const std::vector<std::string> players {"Alice", "Bob"};
for(Num m{2}; m<=10; ++m) {
for(Num n{1}; n<m; ++n) {
std::vector<Set> hands(2);
Num total = n * (n+1);
for(Num i{0}; i<2; ++i) {
for(Num j{1}; j<=n; ++j) {
hands.at(i).insert(j);
}
}
const auto r = total % m;
const auto r_in = (1 <= r) && (r <= n);
os << "m=" << m << ", n=" << n <<
", mod=" << r << ":" << ", 1<=r<=n " <<
players.at(r_in) << " " <<
players.at(visit_dfs(hands, 0, 0, m)) << "\n";
}
}
}
ã³ãŒãã¯ãã¡ã
ãŒããµã ãªã®ã§ãå
šèŠçŽ ãå¹³åå€ä»è¿ã«ããã£ãŠããç¶æ³ãäœãããã€ãŸãå
šèŠçŽ ã®å·®ãé«ã
1ã«ãããå
·äœçã«ã¯ã
åŸã¯æäœã«ççŸããªãããšã確ãããã No
ãèŠã€ãããªããã° Yes
ãçãã§ããã
ãã®æ¹æ³ã¯å ¬åŒè§£èª¬1ãšåãã§ãããARCæ©è§£ãã§åãŠããªãäžå€éã ãããšæã£ãŠãããã匷éãåãããã®ã¡ã«ã188-Bãäžå€éã ãšæ°ã¥ããã«0å®ããã®ã ãã
ã³ãŒãã¯ãã¡ã
é£æåºŠãé«ãããŠåå ããªãã£ããäœæéçµã£ãŠãè§£ãããšãã§ãããããããžã«ã«ãœãŒãã®æ°ãäžããå¹çããããæ¹æ³ã¯ç¡ãããšæ¢ãããããã®åé¡ã®å ¬åŒè§£èª¬ã«ãã©ãçããŠããŸã£ãã
åææ¡ä»¶ãšããŠãéšåæš
ãã®åæã§ãå ¬åŒè§£èª¬ã«ããéããé ç¹éã®é¢ä¿ã¯æšæ§é ã«ã§ããã倧ããªçªå·ã®é ç¹ããé ã«èµ°æ»ããå°ããªçªå·ã®é ç¹ãæ ¹ãšããéšåæšã®é ç¹æ°ãæ±ãããäžéãèµ°æ»ããããå°ããªçªå·ãã倧ããªçªå·ã®é ç¹ã«åãã£ãŠãããããã®é ç¹ã«ã€ããŠéšåæšã®çµã¿åãããæ±ããŠæãããšæšå šäœã®é ç¹ã®äžŠã³æ¹ãäœéããæ±ãŸãã
ãªã
ARC rated 2åç®ã¯ã120åæããŠäžåãè§£ããªãã£ããååã®ããã«äžæãã¯ãããªãã
ã³ãŒãã¯ãã¡ã
è§£ãããšããã°Aåé¡ãããªããããšããã®ã¯ãå顿ãããé äœè¡šãããåãã£ãã®ã§ãã²ãããåé¡ã«éäžããŠæ©ã¿ã¯ãªãã£ãã
æçªã®éäžã§åºçŸ©å調å¢å ã«ãªã£ããå³å»æã¡åã£ãŠããã
é£ãåãæ° No
ã¯ãªãããã ã蚌æã§ããªãã
ç¿ææ°ãä»ããããšã«ã
ãããŸã§ããã°è§£æ³ãåããããŸãå
¥åãåºçŸ©å調å¢å ãªãäœãããªãã No
ã§ããã
ã³ã³ãã¹ãåŸã« Yes 1 1
ãééããŠããããæåŸã®2 WA 1 msec ã ãšèªåã§æ°ãä»ããã
æ°åãåºçŸ©å調å¢å ãã©ããã¯ã std::ranges::is_sorted
ã§èª¿ã¹ããããè¿ãå€ã¯ç矩å調å¢å ã§ã¯ãªãåºçŸ©å調å¢å (éæžå°)ãã©ããã§ããã
ARC rated 3åç®ãBåé¡ 1å®ã ã£ããã³ã³ãã¹ãäžã«édiffãACããã®ã¯åããŠã26:17ããŒããã§åã®é»ããã©ã§ãããæå€§ç¬é18äœããéãåã£ããAåé¡ããBåé¡ã®åŸç¹ãé«ãããšã«å©ãããããAåé¡ã¯90åæãããå šãåãããªãã£ãã
ã³ãŒãã¯ãã¡ã
DPã ãšæã£ããããã以äžã®ããšã¯åãããªãã£ãã
ããæååã®å®çŸ©ã¯ã A,B,C
ããããã®åºçŸåæ°ã®å¶å¥ãããã£ãŠãããã®ããšèšãæãããããããã8ç¶æ
ãšããŠåºå¥ã§ãããå
¬åŒè§£èª¬ã«ããéãå¶å¥ãå転ããŠããç¶æ
ãåäžèŠããŠ4ç¶æ
ã«æžããããšãã§ããããšèšãããšã«æ°ãä»ããªãã£ãã
ããç¶æ
ã«æãŸããæååã¯ããæååã§ãããããã¯æŽæ°åã®çޝç©åã«ã€ããŠã
å
¬åŒè§£èª¬ã«ããç¶æ
é·ç§»ãå·§åŠã§ããã
ã³ãŒãã¯ãã¡ã
äžå¯§ã«å Žååãããã
Yes
ã§ããã
No
ã§ããã
Yes
ã§ãããããã§ãªããã°å¡ããªãé ç¹ãããã®ã§ No
ã§ããã
以äžã§çããç¶²çŸ
ã§ãããå
¬åŒè§£èª¬ãšã
ã³ã³ãã¹ãäžã®æèã®éçšã远ãã
-
$N$ ãšäœããäºãã«çŽ ãªããåãããšãç¹°ãè¿ããŠãã¹ãŠã®é ç¹ãå¡ãããããã§ãªããã°å¡ãæ®ããããããã®äœããæ±ããã°ãããšçŽèгçã«ãããããã - ãã«ããã¹ãã±ãŒã¹ãªã®ã§ããšããžã±ãŒã¹ãééãããšå€§éã®WAãè¿ã£ãŠããŠãæ ¹æ¬çã«è§£æ³ãééã£ãŠããã®ãããã§ãªãã®ãåãããªãããã£ãŠæåã«ãšããžã±ãŒã¹ãæããŠããã以å€ã®å Žååããäžå¯§ã«è¡ãã
- 顿ãçè§£ããããã«æãåããã
$N = 2$ ãç¹æ®ã ãšåãããäºãã«å¯Ÿç§°ãªäœçœ®ãªãè©°ãã®ãåããã -
$N$ ãå¶æ°ãªãåæã¯èªåã®äœçœ®ã察称ãªäœçœ®ãããªãã®ã§ããšãããã察称ãªäœçœ®ã«æã£ãŠãçŽåã«æã£ãç¹ã®å¯Ÿç§°ãªäœçœ®ã«æã€ã®ãç¹°ãè¿ãã$N$ ã奿°ã®å Žåãåæ§ã«ç¹°ãè¿ãã以åŸåç¹ãèªã¿æ¿ããã ããªã®ã§åšææ§ããããããã§å šé ç¹ãå¡ããã ããã -
$gcd(N,x) = gcd(N,N-x)$ ãªã®ã§ã$K$ ã$N - K$ ã«èªã¿æ¿ããŠããããããã§å Žååããæžãã笊å·ãå ¥ãæ¿ããŠãæå€§å ¬çŽæ°ã¯å€ãããªãã®ã§ã絶察å€ãåã£ãŠå Žååããæžããã - ãã以äžå Žååãã¯ç¡ãã®ã§æåºãããACãããæå€§ç¬éé äœããæ³åããã«ããã®æç¹ã§å€ãã®æ¹ã¯Aåé¡ãè§£ããŠããéäžã§ãBåé¡ãæåã«åãçµãã æ¹ã¯å°ãªãã£ãã®ãããããªãã
ã³ãŒãã¯ãã¡ã
Div.2 ã«ãªã£ãŠ400ç¹åé¡ãåºãã®ã«ã120åæããŠäžåãè§£ããªãã£ããARCã¯ããã»ã©çããªãã
è§£ã«ãªãããªããã®ãé€å€ããã䞡端ã¯å€ããããªãã®ã§
ãªããŒã·æäœã¯ãäž¡é£ãç°ãªãå Žæ
å
¥å 1010...
ã§ã¯ãå¹
以äžã©ã³é·ã¯ãã¹ãŠå¥æ°ãšãããã©ã³é·ã1ã®ã©ã³ã¯äœãæäœããªãã®ã§ç¡èŠãããã©ã³
ç°ãªãã©ã³ã®æäœã«ã€ããŠé åçµã¿åãããèããã
101
ã®çãäžã 1
ã§å¡ããªããŒã·æäœãããªãã®ã§åãã( 010
ãå転ããŠãåããªã®ã§ãä»¥åŸ 0
ãš 1
ãå
¥ãæ¿ããå Žåã¯èããªã)ã
å
¬åŒè§£èª¬ã¯äžèšãšåãããšãèšã£ãŠãããç¹ã«ãããã©ã³ã®æäœåæ°
ã³ã³ãã¹ãäžã®æèã®éçšã远ããäžèšã«æžãã
è§£ã«ãªãããªããã®ãé€å€ããã䞡端ã¯å€ããããªãã®ã§
ã©ã³ã®èŠçŽ ããã¹ãŠããããããšãèããã䞡端ã¯ããã£ãŠããã®ã§ã䞡端ã®éã«
åè»¢æ¹æ³ã¯äºéããããäžã€ã¯
ããã©ã³
ãšæã£ãã®ã ããå
¥åäŸä»¥å€ãçããå
šç¶åããªããå®éšã³ãŒãã15åã§æžãã°åãã£ãããšã§ãããããããã以å€ã®ããšã«æ°ãåããéããŠãå®éšã³ãŒããæžãããšæããªãã£ãã®ã¯åçç¹ã§ããã以äžã«ããéãã 10...
ã 11...
ã«å€ããæ¹æ³ãç·åœããã§æ±ããå®éšã³ãŒãã¯ããã»ã©è€éã§ã¯ãªãã
using Pattern = std::bitset<32>;
using Seq = std::vector<std::pair<Num,Num>>;
Num visit_dfs(Pattern current, const Pattern goal, Num width, Seq& seq) {
Num total {0};
if (current == goal) {
for(const auto& [l,r] : seq) {
std::cout << l << ":" << r << " ";
}
std::cout << "\n";
return 1;
}
for(Num left{0}; (left+1)<width; ++left) {
bool stop {false};
for(Num right{left+1}; !stop && right<width; ++right) {
if (current[left] == current[right]) {
stop = true;
const auto s = right - left;
if (s <= 1) {
break;
}
auto next = current;
for(Num i{left+1}; i<right; ++i) {
next[i] = current[left];
}
if (current != next) {
seq.push_back(std::make_pair(left+1, right+1));
total += visit_dfs(next, goal, width, seq);
seq.pop_back();
}
}
}
}
return total;
}
void full_search(std::istream& is, std::ostream& os) {
Num width = 5;
is >> width;
Pattern current(0);
for(Num i{0}; i<width; i+=2) {
current.set(i);
}
Pattern goal(0);
for(Num i{0}; i<width; ++i) {
goal.set(i);
}
Seq seq;
os << visit_dfs(current, goal, width, seq) << "\n";
}
int main(void) {
full_search(std::cin, std::cout);
return 0;
}
ã³ãŒãã¯ãã¡ã
ã³ã³ãã¹ãæ°æ¥åŸã«è§£ãããDiff 1889 ã®åé¡ãè§£ããã®ã¯ã次åã«æåŸ ãæãŠããã³ã³ãã¹ãäžã¯15åæããŠåãããªãã£ãã®ã§èŠéã£ãããåãã£ãŠããŸãã°å®è£ ã¯ç°¡åã§ããã
ãã®åé¡ã®èŠç¹ã¯ãã³ãã§ã¯ãªãã³ãã®ééãç§»åã§ããããšã§ãããã³ãã®ééãç§»åãå·Šããå³ã«ç§»åã§ããããšã瀺ããå³ããå·Šã«ç§»åããã®ã¯å·Šå³å¯Ÿç§°ã«ããã ããªã®ã§ãã¯ãå¯èœã§ããã
å·Šã®ç«¯ã®ã³ããåç¹
ã©ã®ã³ããã©ãã«ç§»åãããã¯æ°ã«ããªããå
ã®ã³ããã©ãã«ãã£ãããæ°ã«ãããåæé
眮ãã
ããããåããã®ã¯æäœ1åã§ã
çããæå°ã«ããã«ã¯ãééãå°ãªããã®ã»ã©å·ŠåŽã«å¯ããã°ãã(ééã倧ãããã®ãå·ŠåŽã«ãããªããå³ã«ããééãšå
¥ãæ¿ãããšçããå°ããã§ããã®ã§)ããã£ãŠå¶æ°çª
ãœãŒãåŸã®
ãã®æ¹æ³ã¯å ¬åŒè§£èª¬ãšåãã§ãããäžèšãäžå€éã ãšåŸã§ç¥ã£ããäžå€éãèŠæãã°ã³ã³ãã¹ãã§å§åã§ããããäžå€éãèŠæãã®ã¯ãã®éãé£ããã
ã³ãŒãã¯ãã¡ã
ã³ã³ãã¹ãäžã«ã¯ã¡ãã£ãšèŠããè§£ããããç¡ããšè«Šãããã®åŸ4æ¥ã»ã©èããããå šãçããåãããªãã£ããã¹ã©ã€ã ã¯ååããããšãèšç®éãæ±ºãããšããçºæ³ã«è³ããªãã£ãã
ã¹ã©ã€ã ã倧ããããã®ã§ã¯ãªãããã以äžå€§ãããªããªããšããå£ã«æ³šç®ããã®ã¯æ£ããã£ãããããèšç®éã®èŠç©ãããã§ãã
ãã®åé¡ã®2ãæ¬¡ã®ABC 384ã«åºãããã¡ãã¯ç·diffã®ãšã£ã€ããããåé¡ã ããããã«ãã£ãåºããŠããŸã£ãã
ã³ãŒãã¯ãã¡ã
Div.1 ã¯ã¬ãŒãã£ã³ã°ãè¶³ããªãã®ã§unrated確å®ã§ãããAåé¡ã¯è§£ãããšæã£ããçµå±è§£ããªãã£ãããããããšè¶³ããªãã
ç¿ææãã€ããè§£æ³ã¯ãå ¬åŒè§£èª¬ãšã»ãŒåãã ã£ãããããè§£æ³ã®è©°ããçããšãããããå®è£ æ¹æ³ãåãããªãã£ãã以äžåéåºéã§èããã
ããç¯å²
ãã2ã€ã®ç¯å²
-
$S1 \cap S2 = \emptyset$ ãªããäž¡ç¯å²ã«æäœ2ãé©çšããŠéæã§ãã -
$S1 \supset S2$ ãªãã$S1$ ã«æäœ1ã$S2$ ã«æäœ2ãé©çšããŠéæã§ãã -
$S1 \cup S2 = [1,N]$ ãªããäž¡ç¯å²ã«æäœ1ãé©çšããŠéæã§ããããããæããŠããããšããããå®è£ ãåããªããŠåå°œããã - äžèšä»¥å€ã§
$M \leq 2$ ãªãè§£ç¡ãã§ãã
äžèšä»¥å€ã®å Žåã
å®è£ æ¹æ³ããã£ã±ããããããä»ã®æ¹ã®ã³ãŒããèªãã§ããããçè§£ãããã³ã¹ã2ã®ãšãã®å®è£ æ¹æ³ã¯ä»¥äžã®éãã§ããã
-
$S1 \cap S2 = \emptyset$ ã¯ã$min(R_i) \leq max(L_j)$ ãæºãã$(i,j)$ ãéžã¶ãããã¯$min(R)$ ,$max(L)$ ããããã æ·»ãå$1..N$ ã«ã€ããŠæŽæ°ããã -
$S1 \supset S2$ ã®æ±ãæ¹ãåãããªãã£ããã»ã°ã¡ã³ãæšã䜿ã£ããã©ãããŠãçããåããªããä»ã®æ¹ã®ã³ãŒããåèã«ã$S$ ã$[L,R)$ ã®æé ã«ãœãŒããã$max(R)$ ãæŽæ°ãã$R_i \leq max(R)$ ã€ãŸãå³ç«¯ãé転ãããæ¡ä»¶ãæºãã(巊端$L$ ã¯éæžå°ãªã®ã§)ãçå·ãå«ã(åäžç¯å²ãäºã€ããã°ãæ£è»¢ãšå転ã§$[1,N]$ ãèŠãã)ã -
$S1 \cup S2 = [1,N]$ ã¯ã$[1,R_i)$ ,$[L_j,N+1)$ ã ãæ³šç®ããã$1,N+1$ ãåºå®ããŠ$max(R)$ ,$min(L)$ ãæ±ãã$max(R_i) \leq min(L_j)$ ãªãæ¡ä»¶ãæºãããããã¯ããã§ãã£ãŠããããã³ã¹ã3以äžã¯å¿ ãéæã§ãããšæ°ãä»ããªããšãã®åŠçãæãã€ããªãã
ã³ã³ãã¹ãäžã«ã¯éã«åããªãã£ãããç¿æã ãããæãã€ããã®ã ããèªåACãããã£ããæ°Ždiffãè§£ããªããšARC Div. 2ãå³ããã
以äžã¯ã³ã³ãã¹ãäžã«æãã€ããè§£æ³ã§ããããŸãã£ããçå€ãã ã£ãããã ã
æäœ1,2ãåç°äžã®æäœãšããŠè¡šçŸãããæäœ1ã¯
åç°ã® -1
ãåºåãããæäœã®éœåäžã
åã¯ãšãªã«å¯Ÿå¿ããæäœ1,2ãããããçšæãããGreedyãªæ¹æ³ãšããŠã std::set
ã§æã¡ããã®æå€§èŠçŽ ãã»ã°ã¡ã³ãæšã«èŒããªããã°ããã
ã»ã°ã¡ã³ãæšã«ã
ãã®æ¹æ³ã¯ååãããACããæ®ããWAã«ãªããããããã³ã¹ã3以äžãéæã§ããŠããªããå®è£ ãããçŽããšå°ã ãããã« ãªããããã§ãé·ãã
ä¹ ãã¶ãã®ratedåå ãA,B 2å®ã103:12ã®7ããã§ããªããšã0å®ãéãããèŸãããŠæ°Žããã©ã確ä¿ãããå顿ãã±ã£ãšèŠãã ãã§ãA,Båé¡ã¯è§£ããªããã°ãªããªãé£æåºŠ(Aã¯è¶diff, Bã¯ç·diffãæ³å®)ãC,D,Eåé¡ã¯è§£ããªããšå€æãããA,Båé¡ã¯ã©ã®ã¿ã¡è§£ããªããã°ãªããªãã®ã§Aåé¡ããçæããããçµæçã«Båé¡ããè§£ããæ¹ãããã£ãã
ã³ãŒãã¯ãã¡ã
Greedyã ãšããã£ããèå¯ã«æéåãã46åæããŠæåºããã1 WAãè¿ã£ãŠããŠ62åæãã£ãã
åºæ¬çã«ã
-
$S$ ã®çœ®ãæãå äœçœ®$to$ ã0ãšãã -
$U$ ã®çœ®ãæãå äœçœ®$from$ ã0ãšãã -
$S[to] < U[from]$ ãªãã$S[to]$ ã$T[from]$ ã§çœ®ãæããã-
$T$ ã®æåŸã®çœ®ãæãäœçœ®$L$ ã$max(L,P[U[from]])$ ã§æŽæ°ããã$to$ ãš$from$ ããããã1ã€å¢ããã -
$S$ ã«$T[from]$ ãæžã蟌ãã ããšã$R[T[from]]$ ã«èšé²ãã
-
-
$S[to] \geq T[from]$ ãªãã$S[to]$ ã$T[from]$ ã§çœ®ãæãããšæããã®ã§çœ®ãæããªãã$to$ ã1ã€å¢ããã$S$ ã«$S[to]$ ãæžã蟌ãã ããšã$R[S[to]]$ ã«èšé²ãã - ããã
$to < N \land from < M$ ã§ããéãç¹°ãè¿ã
1 WA察çãšããŠæãã€ãéãã®ããšãå
¥ããã®ã§äœåãªã³ãŒãããããããããªãã
ã³ã³ãã¹ãäžã®æèã®éçšã远ãã䜿ããšæããæ°åã¯
- åé¡ããã£ããèªãã
$T$ ã¯é çªã«äžã€ãã€åŠçããªããã°ãªããªããã€ãŸããã¹ãŠæ°åã®è¡ãå ãæ±ºããå¿ èŠããããã$S$ ã¯ã©ãã1ãæãéžãã§äžæžãããŠãæ§ããªã -
$T$ ã®æ°åã§$S$ ã眮ãæããŠåŸãããªãç©æ¥µçã«çœ®ãæããã眮ãæãããšæãããªããããããŸã§æºããŠãã©ãããŠã眮ãæããªããã°ãªããªãç¶æ³ãŸã§å å»¶ã°ãã§ãããå®éã«ã¯æºãããšãããããäžæžãããŠãªãã£ãããšã«ããã®ãæ£ããã - éé ã«ãœãŒãæžã®
$T$ ã$U$ ãšãã$U$ ãå·Šããå³ã«ã¿ãŠã$S$ ãå·Šããå³ã«greedyã«çœ®ãæããã°å€§äœçãã¯ãã£ãŠããããããå ¥åäŸã埮åŠã«åããªãã - éé ã«ãœãŒãæžã®
$T$ ã ãèããã®ã¯ä¹±æŽã§ãå ã ã®$T$ ã®é çªã«æå³ããããšæ°ãä»ããæ¹éãäºè»¢äžè»¢ããããã«ãè²ã ãšã³ãŒããééã£ãŠããã$to$ ã$from$ ãšæžãããã - æ¹ããŠã
$U$ ã§ã$S$ ãå·Šããå³ã«greedyã«çœ®ãæããäœã£ã$U$ ã$S$ ã«åã蟌ãããªãåã蟌ã¿ãåã蟌ããªããªã$S$ ã®å³ããåœãŠã¯ãããšããããã§ããã$S$ ã®å Žæã¯å³ããé ã§ã¯ãªãæå³ããå Žæã¯ãªããåã蟌ãå€ã¯$T$ ã®è¡ãå Žæã®ãªãæ°åã®ãã¡æå³ãªã®ã ãããã®ããšã«ãªããªãæ°ãä»ããªãã£ãã®ã§æéãæãã£ãã - äžèšãèžãŸããŠã
$U$ ãåœãŠã¯ããæ°åãé åºä»ãã®$T$ ã«åœãŠã¯ããé·ãã³ãŒããæžãã幟床ãã³ãŒããæžãçŽãããéå®è£ ããé¢ããŠããã®ã§æéãæããã - æ©ãBåé¡ã«ãããªããšãŸããã®ã§æåºãããš1 WAãè¿ã£ãŠãããåºæ¬æ¹éã¯ãã£ãŠããã®ã ããã©ã®ãšããžã±ãŒã¹ãæŒããŠããã®ãããããªãã1å®ã§é ããšè² ããããªã®ã§ããšã«ããæåºé床éèŠã§ããã«ãã£å€çºã®2å®ãç²ãä¹±ææŠãèŠæããã
- ééã£ãŠããã®ã¯
$T$ ãäžæåã®å Žåãšæ±ºãæã¡ããŠãè²ã æžãæ¿ãããéã£ããæããã«çŠããããäœèšãªããã«ãã£ããã(5 WAsãšã)ã - 0å®ã¯éãããæ£è§£è ãå€ããBåé¡ãæ©ãè§£ããªããšãŸãããšããã
ã³ãŒãã¯ãã¡ã
Båé¡ã®æ¹ãAåé¡ããè§£çæéãçãã£ããçµæçã«ã¯éã«åã£ãããåé¡éžã³ãé£ããã
ãã®ããšã¯å
¥åºäŸã® intToBits(20250126)
ã䜿ããçè©°ãããããARCã¯å®éšã倧äºãšããæèšã掻ããã
ãããã®æŽå¯ããã 0
ã®ãããã 0
ãŸã㯠1
ã«ããæ¹æ³ãã€ã
Leading 0sããªã -1
ãåºåããããããæããŠããŠWAããã
-1
ãåºåããããããæããŠããŠWAãããè§£ããããªã -1
ã«ãªãæ¡ä»¶ãtrailing 0sãç¡ãæ°ãšåéãããã®ãWAã®åå ã§ãããæ£ããã¯ããã«æžããéãã
ãã«ããã¹ãã±ãŒã¹ã¯ãšããžã±ãŒã¹ãééãããšå€§éã«WAãè¿ãããä»åã¯ååWAã ã£ãã®ã§è§£æ³ã«èªä¿¡ãæãŠãããã¹ãã±ãŒã¹ã®ããããã«æãããã
ä»åã¯æŽæ°ã®ç¯å²ãRã®æŽæ°ã«åãŸã£ãããåãŸããªããšãã¯gmpã©ã€ãã©ãªãRubyã䜿ã£ãŠèšç®ããå¿ èŠãããããã ã
as.integer(intToBits(20250126))
20250126.to_s(2)
# "1001101001111111000001110"
20381694.to_s(2)
# "1001101101111111111111110"
ã³ã³ãã¹ãäžã®æèã®éçšã¯ãã»ãŒäžèšã®éãã§ãããA,Båé¡ãšããããŸããªæ¹éã¯ããèŠãããã现éšã®è©°ããçãæéãæãã£ãäžããã«ãã£ã®å±±ãç¯ããçµãã£ãŠã¿ãã°A,B 2宿é ã§ãã£ããA,Bãããã30åã§è§£ããªããšéããã©ã¯å³ãããæ¹ããŠå®è£ ãããšããããªã« ç°¡æœãª ã³ãŒãã«ãªããx86ã®PDEPåœä»€ã¯ç¢ºãã«ããŒããŠã§ã¢ã§éãããC++ã§æžããŠãæ°è¡ã§ããã
ä»åã¯èгå¯ã ãã§æ¹éãç«ãŠãã®ã§å®éšã³ãŒããæžããªãã£ãããå®éšã³ãŒããæžããæ¹ãæ©ãè§£ãããããããªããæ®ãæéã50åãããã ã£ãã®ã§å®éšã³ãŒããæžãæéãçããã®ãè£ç®ã«åºãã
void experiment(std::istream& is, std::ostream& os) {
using Num = unsigned long long int;
Num n {0};
is >> n;
Vec cs;
for(Num x{1}; x<=n*n; ++x) {
if ((x ^ n) == (x % n)) {
cs.push_back(x);
}
}
print_oneline(cs, os);
}
ã³ã³ãã¹ãäžã¯æããã¹ããªããæ®ã16åã¯é äœè¡šãçºããŠçµãã£ãã
å ¬åŒè§£èª¬ã®Writerè§£ããã®ãŸãŸå®è£ ãããš ãã¡ã ã«ãªããTesterè§£ã¯çްããå®è£ æ¹æ³ãããããããªãã
Aåé¡1å®ã74:55 2ããã§ããŸãããŠããªããšã0å®ãéãããèªåã®ã¬ãŒãã£ã³ã°åž¯ã§æ£è§£ç7å²è¶ ã®åé¡ãèœãšãããã«ã¯ãããªããBåé¡ãã³ã³ãã¹ãäžã«è§£ããªãã£ãã®ã¯ãããããCåé¡ã¯åãè¶³ããªãã
ã³ãŒãã¯ãã¡ã
æ·±ãèããããŠæ©ãã§ããŸã£ãã
ARCR ARCR A...
ãšäžŠã¹ãã°ãå
ã®
-
$N$ ã4ã®åæ°ã§ããã°ã$A$ ãã©ãããARCR
ã ãã§å šéš1ã«ã§ããã®ã§Yes
ã§ããã -
$N$ ã4ã®åæ°+1ã§ããã°ã$A$ ã«äžã€ã§ã1
ãããã°ãããçµç«¯ã®A
ã«ããããšã§ãARCR
ããªãã¹ãŠå ãããã1
ãA
ã«ããããšã§å šéš1ã«ã§ããã®ã§Yes
ã§ããã$A$ ã«1
ãäžã€ããªããã°No
ã§ããã -
$N$ ã4ã®åæ°+3ã§ããã°ã$A$ ã«äžã€ã§ã1
ãããã°ãããçµç«¯ã®A
ã«ããããšã§ãARCR
ã倿°ãªãã¹ãŠããã®ããšã«ARC
ã眮ããŠãå ãããã1
ãA
ã«ããããšã§å šéš1ã«ã§ããã®ã§Yes
ã§ããã$A$ ã«1
ãäžã€ããªããã°No
ã§ããã
1
ã2ã€æªæºãªã No
ã§ããã
1
ã2ã€ä»¥äžãããšããèããã 11
ãé£ç¶ãããªãäžèšã®èŠé ã§ã ARCR
ã倿°ãªãã¹ãŠããã®ããšã« AR
ã眮ããŠããã®ããš 11
ã«ã§ããŠçã㯠Yes
ã§ãããåæ§ã«ãããé£ãåã 1
ãš 1
ã®ééã€ãŸã座æšã®å·®ã奿°é·(éã«æãŸã£ãŠãã 0
ãå¶æ°å)ãšãããééãæ±ãããšãã«
-
11
ã¯æ¢è¿°ã®éã -
1001
ã¯.CRA
ãšçœ®ãããã®A
ãå é ãšããæ®ãã®æååé·ã¯4ã®åæ°ãªã®ã§ãARCR
ã䞊ã¹ãã -
100001
ã¯.CRARC
ãšçœ®ãããã¯ããã®A
ãå é ãšããæ®ãã®æååé·ã¯4ã®åæ°ãªã®ã§ãARCR
ã䞊ã¹ãã - ããããé£ç¶ãã
0
ãå€ãå Žåã¯ãARCR
ã䞊ã¹ãŠäœããäžèšã®éã調æŽãã
ãŸãšãããšãé£ãåã 1
ãš 1
ã®éé(座æšã®å·®)ã奿°é·ãªç®æã Yes
ãããã§ãªããã° No
ã§ããã
ãã®è§£æ³ã¯å ¬åŒè§£èª¬ãšåãã§ããã
ãããããŠé£ãåã 1
ãš 1
ã®ééã§ã¯ãªãä»»æã®ééã§ã¯ãªãããšæã£ãããæ¢ã«2ããã ã£ãã®ã§äžèšã®èšŒæã端æã£ããŸãŸæåºããŠACãããéã«å©ãããããã³ã³ãã¹ãåŸã«ããã£ããã¬ãŒãã£ã³ã°ã®æéæžè¡°ãç·©ããã ã£ãã®ã§ãããã«ãã£èŠæã§æ©ãæåºããŠtrial and errorã§ããã£ãã
ã³ã³ãã¹ãäžã¯ãã©ã³ã¬ã³ã°ã¹å§çž®ããããåæ¹ãã 0
ã®äžŠã³ãšãããå²ã 1
ã®äžŠã³ã®é¢ä¿ã ãšæ°ã¥ããããäžèšã®ãããªé¢ä¿ã ãšã¯æããªãã£ããã©ã³ã¬ã³ã°ã¹å§çž®ããæ§ç¯ããã®ãè€éãããŠãããããã©ã³ãç¬ç«ã«èããæŠç¥ã¯äžæããããªããšèŠåã£ããããã§è§£æ³ãèŠããã
ã³ãŒãã¯ãã¡ã
ã³ã³ãã¹ãäžã«ã¯éã«åãããç¿æèªåACããã
èªæãªè§£ãšããŠã Fennec
ã§ããã Snuke
ã§ããã
以äž
Snuke
ã§ããã
以äž
å®ã¯ Fennec
ã§ãããããããããã2 WAsãæ®ã£ãã
äžèšä»¥å€ã®å Žå Fennec
ã Snuke
ã§ããã
ãã®è§£æ³ã¯å ¬åŒè§£èª¬2ãšã»ãŒåãã§ããã
#include <bits/stdc++.h>
using Num = unsigned int;
using Vec = std::vector<Num>;
using Stones = Vec;
using Touched = std::bitset<32>;
bool play(bool player, Stones& stones, const Touched touched) {
const auto another = !player;
const auto size = stones.size();
for(size_t i{0}; i<size; ++i) {
if (stones.at(i) <= 0) {
continue;
}
auto next = touched;
next.reset(i);
if (next.count() == 0) {
return player;
}
stones.at(i) -= 1;
const auto result = play(another, stones, next);
stones.at(i) += 1;
if (result == player) {
return player;
}
}
return another;
}
bool search(const Stones& init) {
Stones stones = init;
Touched touched ((1LL << init.size()) - 1);
return play(false, stones, touched);
}
void print_oneline(const Vec& vec, std::ostream& os) {
const std::vector<std::string> strs {".", "1"};
const auto size = vec.size();
for(size_t i{0}; i<size; ++i) {
os << strs.at(vec.at(i) % 2) << " ";
}
}
void solve(std::ostream& os) {
const std::vector<std::string> players {"Fennec", "Snuke "};
for(Num offset{0}; offset<2; ++offset) {
for(Num width{1}; width<6; ++width) {
Num n_patterns {1};
n_patterns <<= width;
for(Num pat{0}; pat<n_patterns; ++pat) {
Touched bits(pat);
const auto ones = bits.count();
Vec init(width);
for(decltype(width) j{0}; j<width; ++j) {
init.at(j) = offset * 2 + (bits[j] ? 1 : 2);
}
print_oneline(init, os);
const auto actual = search(init);
os << players.at(actual + 0);
if (((width == 1) && (actual == false)) ||
((width == 2) && (actual == true)) ||
((width == 3) &&
(((pat != 0) && (actual == false)) ||
((pat == 0) && (actual == true)))) ||
((width > 3) && (((ones % 2) == 0) == actual))) {
os << " : expected\n";
} else {
os << " : UNEXPECTED\n";
}
}
}
}
}
int main(void) {
solve(std::cout);
return 0;
}
ã³ãŒãã¯ãã¡ã
ã³ã³ãã¹ãäžã¯ã¡ãã£ãšèŠãã ãã§ãã€ã³ã¿ã©ã¯ãã£ãåé¡ã¯è§£ããªãã ãããšè«Šããç¿æ¥è§£ãããæ¹éã¯ããç«ã£ãããã€ã³ã¿ã©ã¯ãã£ãåé¡ã®ãããã°ã泥沌ã«ã¯ãŸã2æéãè¶ ããŠããŸã£ããå®è£ åãè¶³ããªããšããããABCã®æ©è§£ãéèŠã®ç·Žç¿ãããŠããªãã®ã§ã³ã³ãã¹ãäžã«ã¯éã«åããªãã
å顿éããã¯ãšãª
-
$C_{1,i} < C_{1,2} \land C_{2,i} < C_{1,2}$ ãªã$i$ ã¯$S_2$ ã«å±ãã - ããã§ã¯ãªãã
$C_{1,i} < C_{2,i}$ ãªã$i$ ã¯$S_1$ ã«å±ãã - ããã§ãªããã°
$i$ ã¯$S_3$ ã«å±ãã ($C_{1,i} > C_{2,i}$ ã§ãã)
ããããŠæ±ãã
A,Båé¡ãšç°ãªããå顿ãèªãã§ããã«æ¹éãç«ã£ããå®è£ åãããã°A,Båé¡ã®ä»£ããã«éžã¹ãããå®è£ åããªããã°ã€ã³ã¿ã©ã¯ãã£ãåé¡ã«ã¯ãã£ããåãçµããªãã
ç§ã«700ç¹åé¡ã¯è§£ãããããªãããDiv. 1ã¯unratedã ãããšããããšã§ã³ã³ãã¹ãã«ã¯åºãã«ç¿æè§£ãããæ°Ždiffã ã£ãããã ããæ°Ždiffã¯è§£ããªããã°ãªããªãã
ã³ãŒãã¯ãã¡ã
ARC 190-Aã®é¡é¡ã«èŠããªãããªãã
å¯èœæããããªã1,2ãŸãã¯3æã§å°éã§ãããå°éå¯èœãªã
åºéã®å³ç«¯
ãã®ãšã
ãããŸã§ãèæ
®ããŠãæå°ã³ã¹ãã -1
ãããã§ãªããã°æå°ã³ã¹ããçããã
æ¹ããŠã
äžèšã¯å
¬åŒè§£èª¬ãšåãã§ããã
åºæ¬æ¹éã¯ããã«æãã€ãããã®ã®ã
äžåãè§£ãããšãã§ãããèšé²ç倧æãå«ãããA,B,Cåé¡ãèŠãŠCåé¡ãªãè§£ãããšæã£ãã72åã§æåºãããWAã仿¹ãªãã®ã§é äœè¡šãèŠããšA,Båé¡ã倧éã«è§£ãããŠããŠã仿¹ãç¡ãã®ã§æ®ã47åãAåé¡ã«ä¹ãæããããã¯ãWAã®å±±ãè¿ã£ãŠãããã©ãããŠCåé¡ãè§£ãããšæã£ãã®ããæåã®70åéã§ãããã¯é äœè¡šãèŠããããªãã£ãã®ãããšã«ããåé¡ã®è§£æ³ã詊åéã³ãããããã
ã³ãŒãã¯ãã¡ã
ã³ã³ãã¹ãåŸã«è§£æ³ãæãã€ãããä»ã®æ¹ã®ã³ã³ãã¹ãææ³ã«DPãšããæåãã¡ãã£ãšèŠããããäžå¿èªåACæ±ãã§ãããã©ã¡ãã«ãããã³ã³ãã¹ãäžã«ã¯åŸç¹ã§ããªãã£ãã®ã ããã
ã¹ã¿ãã¯
- ã¹ã¿ãã¯ã«
$A_i$ ãèŒããã-
$i$ ã奿°ãªããã¹ã¿ãã¯ã¯å¿ ã奿°é·ã«ãªãã$l = 0..\lfloor i/2 \rfloor$ ãšããŠ$R[2l+1] = max(R[2l+1], R[2l] + a)$ ã«ãªãã -
$i$ ãå¶æ°ãªãåæ§ã«ã$l = 1..\lfloor i/2 \rfloor$ ãšããŠ$R[2l] = max(R[2l], R[2l-1] + a)$ ã§ããã
-
- ã¹ã¿ãã¯ã«
$A_i$ ãèŒãããã¹ã¿ãã¯ã®æãäžã®å€ãé€ãã$i$ ã奿°ãªããã¹ã¿ãã¯ãå¶æ°é·ã«ã€ããŠæ¢åºã®å€ã«ãªãã$i$ ãå¶æ°ãªããã¹ã¿ãã¯ã奿°é·ã«ã€ããŠæ¢åºã®å€ã«ãªããçµå±äœãããªãã®ãšåãã§ããã - æ£ç¢ºã«ã¯ã
$R[|S|]$ ã¯ã¹ã¿ãã¯é·ã$|S| $ ã¡ããã©ã§ã¯ãªãã$R[|S|]$ ãšå¶å¥ãçããä»»æã®ã¹ã¿ãã¯é·ã«ãããæå€§å€ãšè§£éãã
ã¹ã¿ãã¯é·ãæžãæ¹åã«ã€ããŠã¯äœãæäœããªãã®ã§ã
-
$i$ ã奿°ãªãã$R[1] = max(R[1], R[0] + a)$ -
$i$ ãå¶æ°ãªãã$R[0] = max(R[0], R[1] + a)$
çãã¯ã
ã³ã³ãã¹ãäžã«æãã€ããè§£æ³ã¯ã©ã³ã¬ã³ã°ã¹å§çž®ã§ãããéè² å€ãç¶ããªãæž©åãããè² ã®å€ãç¶ããªããããè² ã®å€ã«ã€ããŠãã®å€ãèŒãããã®çŽåã®å€ãåé€ããããšã§ãå¶æ°ååäœã§æ¶å»ã§ããã
ãã®èå¯ãããè² ã®å€ãå¶æ°åç¶ããªãããªãã£ãããšã«ã§ããã奿°åãªãå é ã1ãšããŠå¥æ°çªç®ã®å€ã®ãã¡ã©ããäžã€ã ããæ®ããããããéãªæã倧ããªå€ãæ®ãã®ãåŸã§ããããšããè§£æ³ãæåºãããWAã®å±±ãè¿ã£ãŠãã(奿°çªç®ã«ããŠããã¡ã§ãã)ããŸãã£ããæ¹éãééã£ãŠãããäžäºäŒãã
å ¬åŒè§£èª¬ãåºæ¬ã«åãããšãããŠããã衚çŸã¯ç°ãªãã
ã³ãŒãã¯ãã¡ã
ã³ã³ãã¹ãäžã«ã¯ã¡ãã£ãšèŠãŠãã以äžçæããªãã£ãããã³ã³ãã¹ãåŸã«ãããªãè§£ããŠããŸã£ããB,A,Cåé¡ã®é ã«è§£ãã°ããããã®éãã§1å®ã§ããŠã¬ãŒãã£ã³ã°ã®äžãããã ãã¶å°ãªãã£ãããåé¡éžã³ãå®å šã«ééãããåé¡ã®åŸç¹ã¯ã©ãããè§£ããããåé¡ãè§£ãã®ã ããšããææ°èŸŒã¿ãå®å šã«ç©ºåãããŠãããA,Båé¡ã®è§£çè æ°ã¯ã ãããåãã§ãããè§£ããããæ¹ãéžã¹ã°ããã£ãã®ã ããCåé¡ã«æéãæããããŠãBåé¡ãèŠãã«Aåé¡ã«é£ã³ã€ããŠããŸã£ãã
ããã«ãœãŒããããªããããšæããå®éããã§ACããã
äœçœ®
ããããããã«ãœãŒããšã¯éã«ãæå€§ã®æ°ããé ã«å®äœçœ®ã«æã£ãŠãããæ°
ãŸãšãããšã
å ¬åŒè§£èª¬ãåºæ¬ã«åãããšãããŠããã衚çŸã¯ç°ãªãã
ã³ãŒãã¯ãã¡ã
èªåã®ã¬ãŒãã£ã³ã°åž¯ã§ã¯æ£è§£ç5%ã®åé¡ããã©ãããŠè§£ãããšæã£ãã®ã ãããåºæ¬æ¹éã ãã¯ããç«ã£ãã®ã§çŠã£ãã®ã ãããã
å Žååãã¯ä»¥äžã®éãã§ããã
-
$A=1, B=0$ ã¯$C$ ã倧ãããã®ã»ã©æ©ã転æãã -
$A=0, B=1$ ã¯$C$ ã倧ãããã®ã»ã©é ã転æãã -
$A=1, B=1$ ã¯ããã£ãã$A=0$ ã«å€ããŠåŸã§$A=1$ ã«å€ãããšã³ã¹ããäžãããšãã ã転æãã -
$A=0, B=0$ ã¯äœãããªã
äžèšã®æäœ1ã®åŸã«æäœ2ãå®è¡ãããåé¡ã¯æäœ3ãå®è¡ãããªããã€å®è¡ãããšåŸããšããããšã§ãããæäœ3ã®æ°
æäœ3ã
倧ãŸããªæ¹éãšããŠã¯äžèšã¯å ¬åŒè§£èª¬ã®éãã§ãã£ãŠããããå調ã§ã¯ãªãããšãèŠæããªãã£ããå ¬åŒè§£èª¬ã¯èšŒæãäžããŠããããçŽæçã«æ£ãããšåãã£ãããããæ¢çŽ¢ãæã¡åã£ãäžãå®è£ ãå šãäžæããããè§£ããªãã£ããããã®ããã«ãçŽæã«é Œã£ãæªèšŒæã® Greedy ã¯å±éºã§ããæ¡ä»¶ã§ããã
ã³ã³ãã¹ãäžã¯ãããã环ç©åãŸã§èããè³ããªãã£ãããã®åŸç§ãã»ã°ã¡ã³ãæšã§è§£ãããšããããä»ã®æ¹ã® å®è£ ãèŠãŠãããããå®è£ æ¹æ³ãåãã£ããä»ã®æ¹ã¯ã¯ããã«ãã£ããããå®è£ ãããŠããããªãintã ãšãªãŒããŒãããŒããã
Fenwick Treeã2åã环ç©åãš
-
$C$ ãæžããæäœã¯ãæäœ1ã®$S1[0..C-1]$ ãš$T - C$ ã®åã§ãããããã ãã³ã¹ããå¢ãã -
$C$ ãå¢ããæäœã¯ãæäœ2ã®$S2[0..C-1]$ ãš$T$ ã§ãããããã ãã³ã¹ããå¢ãã -
$C$ ã®åã ã$T$ ãæžã£ãå©åŸã¯$C (W1[0..C-1] + W2[0..C-1])$ ã§ãããããã ãã³ã¹ããæžãã - ãããã®åã
$D$ ãšãã
åŸã¯æäœ3ã«ã€ããŠã
-
$U$ ã$U + D$ ã§æŽæ°ãã -
$T$ ã$C$ æžãã -
$S12[C]$ ã«$C$ ãè¶³ãã$W12[C]$ ã«$1$ ãè¶³ãããããã¯ã€ãŸãæäœ1,2ã远å ããããšã«çžåœããã
äžåã¯è§£ãããããŸãã«ãé ãè¶ããã©ã«ãªã£ããèŸãããŠã¬ãŒãã£ã³ã°1200ã«å± æ®ã£ãããããããåŸããªããªã£ããèšé²ç倧æããäºåºŠç¶ãããå®åãšèšããããåŸãªãã
ã³ãŒãã¯ãã¡ã
ç§ãACããè§£æ³ã¯ä»¥äžã®éãã§ãããæ£è§£ã¯ãããè«çã®çµã¿ç«ãŠãæªããã
-
$a$ ã$B$ ã«å«ãŸããªããã€ãŸã$S[a]$ ã空ãªãäœãããªã -
$T[0..k]$ ããã¹ãŠ1以äžã§ãããããªãæå€§ã®$k$ ãæ±ãããããã¯é·ã$k$ 以äžã®æ¥é èŸã«$a$ ãã€ãªããããå¯èœæ§ãããããšããæå³ã§ãããã»ã°ã¡ã³ãæšãäºåæ¢çŽ¢ããŠæ±ããã -
$p \in S[a] \land (p-1) \leq k$ ãæºãããæå€§ã®$p$ ãäºåæ¢çŽ¢ã§æ±ããããã®ãããª$p$ ããªããã°äœãããªãã - ãã®ãããª
$p$ ãããã°ã$T[p]$ ã$T[p] + T[p-1]$ ã§æŽæ°ããããã®ãšããªãŒããŒãããŒããªãããã«ãå€ã®äžéãèšãããå€ã«äžéãç¡ããš3 WAsãããäžé㯠2ã§ãã ã
äžèšã®èµ°æ»ãçµããŠã Yes
ãããã§ãªããã° No
ã§ããã
å ¬åŒè§£èª¬ã¯ãšã£ãŠãç°¡æœã§ãããéšåæååãæ°ãäžããããšåªåããŠ82åãæããŠããŸã£ãããšããããããç§ã®è§£æ³ãæ¬åœã«æ£ãããã©ããæªããã2以äžã1以äžãã¯å€å¥ã§ããããããã§ãªããšãã¯ã©ããªã®ã ãããè§£æ³ãèŠããªããšãã¯DPãšããååã®åçã«åãããããŠããã®åé¡ãARC 194-Aã£ãœãDPã§è§£ãããšããããšãããDPã«ãããšTLEããã®ã§ãç¡çããTLEãåé¿ããŠããæŒããã
å
¬åŒè§£èª¬éãã«å®è£
ãããš ãã ãªããæ£é ãšéé ã®å®è£
ãå
±éåããéé ã®ã€ã³ããã¯ã¹ãæ£é ã«ããããéšåæååé·ã No
ã«ããã
ã³ãŒãã¯ãã¡ã
å šãèŠåœãã€ããªãã£ãã
-1
ã¯ãªãã§ãå
¥ãã®ã§ã -1
ãš -1
ãåèš
çµå±åã®ãããã³ã°ãäœéããããæ°ããæ¹æ³ãåãããªãã£ããå
¬åŒè§£èª¬ã«ããéãã
æåŸã«ã No
ã«ã§ãããæ£è§£ãŸã§ã«ã¯å¹Ÿéã®èå¯ãè¶³ããªãã£ãã
ã³ãŒãã¯ãã¡ã
ã ãããåã£ãŠããã ãACã§ããªããŸãŸè§£èª¬ãèªãã ããšããžã±ãŒã¹ãæŒããŠããã
No
ã§ããããªããªã
éçå Žã®ãã€ã€ã¢ã³ã圢ãèããããŸã
ããŒã ããŒã¹ No
ãçãã§ããã
- äžå¡
$(1,1)$ ãã äºå¡$(0,2)$ ã¯$B$ ã§é²ã - äºå¡
$(0,2)$ ãã äžå¡$(-1,1)$ ã¯$B$ ã§é²ã - äžå¡ããããŒã ããŒã¹ã¯ãå·Šäžã«è¿åããã
$\lfloor (B - 3) / 2 \rfloor$ åå·Šäžã«é²ãã§æ»ã
No
ã«ããã
ãšããã®ãå®è£
ããã®ã ãã13 WAs ãè¿ã£ãŠããããšããžã±ãŒã¹ãè¶³ããªãã®ãå®è£
ãééããã®ãããããªããå
¬åŒè§£èª¬ãã¿ãŠãã No
ã¯ç¹ãèŸŒã¿æžãªã®ã§ãæ¹ããŠå®è£
ããªããŠã ACãã ã
ã³ãŒãã¯ãã¡ã
ã³ã³ãã¹ãå€ã§èãããå
šãåãããªãã£ãã解説ãèªãã åŸã® std::set
å®è£
ã«ããã£ã·ãæéãæããŠããŸã£ãã
ä¹ ãã¶ãã®ratedã§ãããAåé¡ã1宿©è§£ã17:31ããããåŸãç¶ããªãã£ããB,Cåé¡ãã³ã³ãã¹ãåŸã«æãã€ãããé ãã£ããç¹ã«Cåé¡ã¯å¶çŽãèŠåã£ãŠæ£è§£ãŸã§ããšäžæ©ã ã£ãã®ã«ãéå ·ã«äœ¿ãããŠããŸã£ãã
ã³ãŒãã¯ãã¡ã
ããåã«æ³šç®ãããšãã§ããã ãäž(è¡çªå·ãå°ãã)ã³ãŒã¹ãšãã§ããã ãäž(è¡çªå·ã倧ãã)ã³ãŒã¹ã®éã¯ãä»»æã®å Žæãéãããããã¯äž(è¡ãå¢ãã)æ¹åã®ç§»åãšãå³(åãå¢ãã)æ¹åç§»åãéé ã«ããã°å®çŸã§ããã
D
㯠R
㯠?
ããã®ããã«çœ®ãæãããäžã³ãŒã¹ã¯ ?
ãåºçŸé ã« R
ã«çœ®ãæãã R
ãå°œãããæ®ãã® ?
ã D
ã«çœ®ãæãããäžã³ãŒã¹ã¯ ?
ãåºçŸé ã« D
ã«çœ®ãæãã D
ãå°œãããæ®ãã® ?
ããR
ã«çœ®ãæããã
äžã³ãŒã¹ãšäžã³ãŒã¹ã®çµè·¯ã¯ã·ãã¥ã¬ãŒã·ã§ã³ããã°åãããå
ã³ãŒãã¯ãã¡ã
ã³ã³ãã¹ãäžã¯å šãææãããã€ããããã³ã³ãã¹ãåŸã«ãªã£ãŠæ¹æ³ãæãã€ããã
std::lower_bound
ã§åãã)ã
éã«èšŒæãããå¹³åå€ãäžããã«ã¯ããã®æç¹ã§
å ¬åŒè§£èª¬éããã©ãããŸã çè§£ããŠããªãã
ã³ãŒãã¯ãã¡ã
ã¯ãšãªã®æ°
ã³ã³ãã¹ãäžã¯Policy-Based Data Structuresã䜿ãããšã«ãã ãããããŠãå¹³æ¹åå²ã§äžæãããšèšç®éãæžããããšè©Šã¿ãããçµå±TLEãåããªãã£ããæ£è§£ã¯ã»ã°ã¡ã³ãæšã§ãããè»¢åæ°ãã»ã°ã¡ã³ãæšã§æ°ããã®ã¯å žåãªã®ã«ãäžããnçªç®ãæ¢ãã®ãäºåæ¢çŽ¢ã§ããããšãæãåºããªãã£ããæãåºãããåçºæãããšãã«ã¯ãã§ã«é ãã
atcoder::segtree::max_right
ã䜿ã£ãäºåæ¢çŽ¢ã§æ±ãŸããããšã¯ã¯ãšãªããšã«
-
$A > L$ ãªãã$S$ ã®èŠçŽ ã¯å€ãããªãã®ã§äœãããªã -
$A \leq L$ ãã€ã»ã°ã¡ã³ãæšã®å€$T[A] = 0$ ãªãã$A$ ã®åæ°ã¯æ¶ããŠããã®ã§äœãããªã -
$A \leq L$ ãã€ã»ã°ã¡ã³ãæšã®å€$T[A] = 1$ ãªãã$A$ ã®åæ°ãæ¶ããå ·äœçã«ã¯$T[Ai] = 0$ ã«ãã ($i$ ã¯$Ai \leq L$ ãæºããæŽæ°)
Policy-Based Data Structuresãç¥ã£ãŠããããéå ·ã«äœ¿ãããŠããŸã£ããããã§ãããªãã»ã°ã¡ã³ãæšãåãåºããªãã®ã¯å®è£ åãè¶³ããªããABC 392-Fãã»ã°ã¡ã³ãæšã§å®è£ ããªãã£ãããã§ãããçµæãã»ãšãã©è§£ããŠããåé¡ãèœãšããŠããŸã£ãã
ãã®è§£æ³ã¯å ¬åŒè§£èª¬éãã§ããããªãå ¬åŒè§£èª¬ã«ã¯å¹³æ¹åå²ãèŒã£ãŠãããäžæãå¹³æ¹åå²ã䜿ãã°è§£ããã®ã ãç§ã«ã¯ãã®åéãç¡ãã£ãã
飿¥å ãåäžãªé ç¹ãåäžèŠããŠé åãæ±ããããšããæ¹æ³ã¯35 WAsããã諊ããŠå ¬åŒè§£èª¬ãèªãã ãçè§£ããŠããªãã
6:27 1ããã§æ®ã113åäœãã§ããã«çµãã£ããç·diffãèœãšããŠã¬ãŒãã£ã³ã°ç·èœã¡ã確å®ããã
ã³ãŒãã¯ãã¡ã
å¶æ°ã®éåã ãããšããçŽæãçããã®ã§ãã®ãŸãŸæåºãããã
ã³ãŒãã¯ãã¡ã
ã³ã³ãã¹ãäžã¯å šãæ£è§£ã§ãããã³ã³ãã¹ãåŸã«å®è£ ãééãããšæã£ãæåºãACããŠããŸã£ããèªåã§ãäœãèããŠããã®ããå ¬åŒè§£èª¬ãèªããŸã§åãããªãã£ãã
ç¶æ é·ç§»å³ãæžãã
- ç¶æ 0: ããã§ã¯0ã®ç¹°ãè¿ããé·ç§»å ã¯äžçªç®ã®1(ç¶æ 1a)ãŸãã¯2(ç¶æ 2)ãããã¯èªåèªèº«(ç¶æ 0)ã
- ç¶æ 1a: åã®ç¶æ ã0(ç¶æ 0)ãããã¯äžçªç®ã®1ãé·ç§»å ã¯äºçªç®ã®1(ç¶æ 1b)ãŸãã¯2(ç¶æ 2)ã
- ç¶æ 1b: åã®ç¶æ ãäžçªç®ã®1(ç¶æ 1a)ãŸãã¯2(ç¶æ 2)ãããã¯äºçªç®ã®1ãé·ç§»å ã¯0(ç¶æ 0)ã
- ç¶æ 2: åã®ç¶æ ã0(ç¶æ 1)ãŸãã¯äžçªç®ã®1(ç¶æ 1a)ãããã¯2ãé·ç§»å ã¯äºçªç®ã®1(ç¶æ 1b)ã
ããããæ¡ä»¶ãå°åºããããå ¬åŒè§£èª¬ã®æ¹ãã¯ããã«åãããããã
- 0ã¯å€ãåã«ã¯æ§ããªã
- 2ãšåæ°ä»¥äžã®0ãèŠã
$X \geq Z$ -
$Z = 0$ ãªãã$Y$ ã¯å¶æ°ã§ãªããã°ãªããªããç¶æ 0,1a,1bãåãã«ã¯$X \geq Y/2$ ãèŠã -
$Z > 0$ ãªããç¶æ 0,2,1bãéã£ãŠ$Y$ ãå¶æ°ã«ã§ããããã£ãŠå ã®$Y$ ã奿°ãªãã$Y$ ãš$Z$ ã1æžãããæžãããåŸã«ç¶æ 0,1a,1bãåãã«ã¯$X \geq \lfloor Y/2 \rfloor$ ãèŠã - äžèšãæºãããªãã以äžã®ã©ããããã©ãã
- ç¶æ 0,2,0 ã®é
- ç¶æ 0,1a,1b,0 ã®é
- ç¶æ 0,1a,2,1b,0 ã®é ããããèŠæããªãã£ãã
å
¬åŒè§£èª¬ã«ææããããŸã§è²ã
ãšåãããªãã£ããç¶æ
0,2,1b,0 ã®é ã¯ã
ç¶æ é·ç§»å³ããå¶çŽãå°ãæ¹æ³ããçµå±ã³ã³ãã¹ãäžã«åãããä»èãã ã£ããããã«ãARCãããè¯åã§ãããç§ã®æã«ã¯è² ããªãã£ãã