3æ23æ¥ãš26æ¥ã«ãªã³ã©ã€ã³ã§ã
IT.Mail.Ruãã©ãããã©ãŒã ãš
Codeforces㧠ã8ã11幎çã®çåŸã察象ãšãã
Technocup 2016ããã°ã©ãã³ã°
ã³ã³ãã¹ãã® 2ã€ã®äºéžã©ãŠã³ããéå¬ãããŸããã ãã·ã¢å
šåãšCISããã®1.5äžäººä»¥äžã®åå è
ãã¢ã¹ã¯ã¯ã®äŒå Žã§äŒãæ©äŒãæ±ããŠæŠã£ãã æé«ã®300人ã決åæŠã«é²ã¿ã4æ17æ¥ã«MSTUã§éå¬ãããŸãã N. E.ããŠãã³ãšMIPTã

4æã«ã¯ãiPad mini 2ãiPod nanoãiPod shuffleãªã©ã®é
åçãªè³åãç²åŸããããã«ãåã³åœŒãèªèº«ã蚌æããæ©äŒãäžããããŸãã ãããµããææè³ã«å ããŠãäžå¯æ¬ ãªåèªãšå°æ¬ã«å ããŠãæåã®ãã¯ããã¥ãŒãïŒIåŠäœã®åæ¥èšŒæžïŒã®åè³è
ã¯ãMIPTããã³MSTUã®åŠéšããã³å°éããã°ã©ã ãžã®å
¥åŠã®ããã«æ倧8ã€ã®è¿œå ãã€ã³ããåãåããŸãã N.E.ããŠãã³ãããã³åè³è
ïŒIIããã³IIIåŠäœã®åæ¥èšŒæžïŒ-6ã€ã®è¿œå ãã€ã³ãã åã©ããã¡ã¯ãã§ã«äžæµã®ITã¹ãã·ã£ãªã¹ããšç¥ãåãããšãã§ããå°æ¥çã«ã¯ã¢ã¹ã¯ã¯ã®æé«ã®æè¡å€§åŠã®1ã€ã§ã®ç 究ãšããã¯ãããŒã¯ãšãã¯ããã¬ãã¯ã®è¿œå ã®æè²ããã°ã©ã ãçµã¿åãããããšã«ãªãã§ãããã
ããã¯ãã¯ããã¯ã¯éèŠãªç€ŸäŒçã€ãã·ã¢ããã§ãããªãªã³ãã¢ãŒãã®ãããã§ãæèœã®ããè¥ãããã°ã©ããŒã¯åœã®äž»èŠãªæè¡å€§åŠã«å
¥åŠããæ©äŒãããã«å¢ããŸãã ç§ãã¡ã¯ãåŠçãåŠç«¥ã«ã§ããã ãå€ãã®æ©äŒãäžãã倧äŒæ¥ã§ã®ä»äºã«å¿
èŠãªç¥èãå®è·µãç²åŸããããç¬èªã®ãããžã§ã¯ãã®éçºãéå§ãããããããã«äœç³»çã«åãçµãã§ããŸãã 倧åŠãšã®æè²ãããžã§ã¯ãïŒãã¯ãããŒã¯ããã¯ãã¹ãã£ã¢ããã¯ããã¬ãã¯ïŒãITãã£ã³ããªã³ã·ããããããŠãã¯ãã«ãã¯ãã®ãªã¹ããè£å
ããŸããããã¯ããDmitry Dmitry21 Voloshinãç 究æè²ãã£ã¬ã¯ã¿ãŒãMail.Ruã°ã«ãŒãã
ä»å¹Žã®åå è
ãšãå°æ¥ã®ãã¯ãã«ããã®æºåãããã人ã®ããã«ãã¿ã¹ã¯ã®è°è«ãè¡ããŸãã
å°Ÿæ ¹ã®èŒªéã¯ãèšå·ãããïŒç©ºã®ã¹ããŒã¹ïŒãšã*ãïŒå±±ã®äžéšïŒã®é·æ¹åœ¢ã®è¡šã®åœ¢åŒã§æŠç¥çã«å®çŸ©ãããŸãã ããŒãã«ã®ååã«ã¯ãå°ãªããšã1ã€ã®ã¢ã¹ã¿ãªã¹ã¯ãå«ãŸããŠããŸãã æåã*ãã®ããããããããªãã¯ã¹ã®æäžè¡ã«ãããããã®ããäžã«å¥ã®æåã*ããããããšãä¿èšŒãããŠããŸãã
...........
.........*.
.*.......*.
**.......*.
**..*...**.
***********
å±±èã®ç»åã®äŸèŠ³å
ã«ãŒãã¯ãå·Šããå³ãžå±±å
šäœãééããŸãã æ¯æ¥ã芳å
客ã¯å³ã«ç§»åããŸã-åè·¯å³ç»åã®é£ã®åã«ç§»åããŸãã ãã¡ããã圌ã¯å±±ã®æé«ç¹ã«ç»ãïŒãŸãã¯èœã¡ãïŒãã³ã«ã察å¿ããåã«ãããŸãã
æåã«èŠ³å
客ãæåã®åã®æé«å°ç¹ã«ãããæåŸã®åã®æé«å°ç¹ã§ã«ãŒããçµäºããããšãèæ
®ããŠã2ã€ã®éãèŠã€ããŸãã
- 1æ¥ã®æ倧äžæïŒå°Ÿæ ¹ã®ãããã¡ã€ã«ã«1ã€ã®äžæããªãå Žåã¯0ã«çããïŒã
- 1æ¥ãããã®æ倧éäžïŒå±±ã®ãããã¡ã€ã«ã«éäžã1ã€ããªãå Žåã¯0ã«çããïŒã
解決ç ã ãã®åé¡ã解決ããããã«ãåå±±ã®é«ããèšç®ããé
å
h []ã«æ ŒçŽã
ãŸã ãããã§ã
h [j]ã¯
jçªç®ã®å±±ã®é«ãã«çãããªããŸãã ãããè¡ãã«ã¯ãç¹å®ã®è¡åããã€ãã¹ããè¡
iããã³å
j ïŒè¡ãšåã®ã€ã³ããã¯ã¹ã0ïŒã®èŠçŽ ãã¢ã¹ã¿ãªã¹ã¯ã«çããå Žåã
jçªç®ã®å±±ã®é«ããæŽæ°ããŸã
ãh [j] = maxïŒh [j]ã n-iïŒ ã 0ãã
m-2ãŸã§ã®åãåçŽã«å埩ããçŸåšã®åã
jã§ããå Žåãæ倧äžæãŸãã¯æ倧äžéãå€
| h [j + 1]-h [j] |ã§æŽæ°ã
ãŸãã ã
ãœãªã¥ãŒã·ã§ã³äŸ int n, m; int h[N]; char c; void solve() { cin >> n >> m; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cin >> c; if (c == '*') { h[j] = max(h[j], n - i); } } } int maxU = 0, maxD = 0; for (int i = 0; i < m - 1; i++) { int diff = h[i + 1] - h[i]; if (diff > 0) { maxU = max(maxU, diff); } else { maxD = max(maxD, -diff); } } cout << maxU << ' ' << maxD << endl; }
Vasyaã¯
nåã®èãæã€ããŒãã«ã賌å
¥ããŸããã åèã¯ãäºãã«æ¥ç¶ãã2ã€ã®éšåã§æ§æãããŠããŸãã åéšåã¯ä»»æã®æ£ã®é·ãã«ããããšãã§ããŸããã
2nåã®éšåãã¹ãŠããåãé·ãã®
nåã®èãäœæã§ããããšãä¿èšŒãããŠããŸãã èãã³ã³ãã€ã«ãããšããä»»æã®2ã€ã®ããŒããäºãã«æ¥ç¶ã§ããŸãã æåã«ãããŒãã«ã®ãã¹ãŠã®èãå解ãããã©ã³ãã ãªé åºã§é·ã
2nã®éšåãäžããããŸãã
VasyaãããŒãã«ã®ãã¹ãŠã®èãåéãããããããã¹ãŠåãé·ãã«ãªãããã«ããæå®ããã
2nåã®ããŒã¹ââãæ£ããæ¹æ³ã§ãã¢ã«åå²ããŸãã åèã¯æ£ç¢ºã«2ã€ã®éšåã§æ§æãããŠããå¿
èŠãããã1ã€ã®éšåã ããèãšããŠäœ¿çšããããšã¯ã§ããŸããã
解決ç ã ãã®åé¡ã解決ããããã«ããŸã1ã€ã®çµã¿ç«ãŠãããããŒãã«èã®é·ããèšç®ããå€æ°lenã«ä¿åããŸãïŒlen = sum /
n ãããã§sumã¯ãã¹ãŠã®éšåã®åèšé·ã
nã¯ããŒãã«èã®æ°ïŒã èã®ãã¹ãŠã®éšåã®é·ããé
å
[]ã«ä¿åããæé ã«äžŠã¹æ¿ããŸãã 次ã«ã0ãã
n -1ãŸã§ã®å€æ°
iã®åºéã®éšåãæŽçããããã«å¿ããŠ
ïŒa [i]ãlen-a [i]ïŒã®åœ¢åŒã®ãã¢ãåºåããŸãã
ãœãªã¥ãŒã·ã§ã³äŸ int n, len, sum; int a[N]; int main() { cin >> n; for (int i = 0; i < 2 * n; i++) { cin >> a[i]; sum += a[i]; } len = sum / n; sort(a, a + 2 * n); for (int i = 0; i < n; i++) { cout << a[i] << ' ' << len - a[i] << endl; } }
nè¡
måã§æ§æãããé·æ¹åœ¢ã®åžæŸæš¡æ§ã®ãã£ãŒã«ãã衚瀺ãããŸãã ãã®ãã£ãŒã«ãã«ã¯ã次ã®ãããªäžé£ã®æåã*ããå«ãŸããŠããŸãã
- ãµã€ã¯ã«ããã€ãã¹ããã«ã¯ãåã»ã«ã1åã ãã¢ã¯ã»ã¹ãããã®ãã³ã«1ã»ã«ãã€äžäžãå·Šå³ã«ç§»åããŸãã
- ãµã€ã¯ã«ã«ã¯èªå·±äº€å·®ãšã»ã«ãã¿ãããå«ãŸããŠããŸãããã€ãŸãããµã€ã¯ã«ã®2ã€ã®ã»ã«ã¯ããµã€ã¯ã«ã«æ²¿ã£ãŠç§»åãããšãã«é£æ¥ããå Žåã«ã®ã¿é£æ¥ããŸãïŒã³ãŒããŒã«æ²¿ã£ãã»ã«ãã¿ãããçŠæ¢ãããŸãïŒã
æå¹ãªã«ãŒãã®äŸã次ã«ç€ºããŸãã

ãµã€ã¯ã«ä»¥å€ã®ãã£ãŒã«ãã®ãã¹ãŠã®ã»ã«ã«ã¯ãèšå·ããããå«ãŸããŠããŸãã ãã£ãŒã«ãã«ã¯1ã€ã®ãµã€ã¯ã«ããããŸãã ããããã¯ããµã€ã¯ã«ä»¥å€ã®çŽ°èã蚪ããããšãã§ããŸããã
ãµã€ã¯ã«ã®ã»ã«ã®1ã€ã«ããããããããŸãã ãã®ããã¯ã¹ã«ã¯ãSãã®ããŒã¯ãä»ããŠããŸãã ãããããã«ãŒããåé¿ããããã®äžé£ã®ã³ãã³ããèŠã€ããŸãã å¯èœãª4ã€ã®ã³ãã³ãã¯ããããæåã§ãšã³ã³ãŒãããã1ã€ã®ã»ã«ã«ããããããã®åãã瀺ããŸãã
- ãUã-ã»ã«ãäžã«ç§»åãã
- ãRã-å³åŽã®ã»ã«ã«ç§»åãã
- ãDã-ã±ãŒãžãäžã«ç§»åãã
- ãLã-å·Šã®ã»ã«ã«ç§»åããŸãã
ããããã¯ãåã»ã«ãæ£ç¢ºã«1åãã€å·¡åããŠããµã€ã¯ã«ãåãå¿
èŠããããŸãïŒéå§ç¹ãé€ããããããå
ã§ãã¹ãéå§ããã³çµäºããŸãïŒã
æ¢ããŠããã³ãã³ãã®ã·ãŒã±ã³ã¹ãèŠã€ããŸããã«ãŒãå
ã®ä»»æã®æ¹åãèš±å¯ãããŸãã
解決çã æåã«ãããããã®éå§äœçœ®ãèŠã€ããŠä¿åããå€ãã¢ã¹ã¿ãªã¹ã¯ã®éå§äœçœ®ã«å²ãåœãŠãŸãã æ¡ä»¶ã«ãããèªå·±äº€å·®ãšã»ã«ãã¿ãããªãã§ç Žç·ãæå®ãããããã次ã®ã¢ã«ãŽãªãºã ã¯çã§ãïŒã¢ã¹ã¿ãªã¹ã¯ãå«ãŸããçŸåšã®ã»ã«ã«é£æ¥ããã»ã«ãããå Žåãå€ãã¢ã¹ã¿ãªã¹ã¯ã«çãã次ã®ã»ã«ã«ç§»åãããã®å€ããã€ã³ãã«å²ãåœãŠãŸãïŒãã®å Žåãæ¹åã«å¯Ÿå¿ããæåãå°å·ããŸãç§ãã¡ã亀差ããïŒã ãã®å Žåãé£æ¥ããã»ã«ã¯ãçŸåšã®ã»ã«ã«ã¢ã¯ã»ã¹ããã»ã«ãšã¯ç°ãªãå¿
èŠããããŸãã ã¢ã¹ã¿ãªã¹ã¯ãä»ããé£æ¥ã»ã«ããªãå Žåãããªã©ã€ã³å
šäœããã€ãã¹ããŠãããããããã°ã©ã ãçµäºããå¿
èŠããããŸãã
ãœãªã¥ãŒã·ã§ã³äŸ int n, m, sx, sy; char a[N][N]; int dx[] = {-1, 1, 0, 0}; int dy[] = {0, 0, -1, 1}; char dir[] = {'U', 'D', 'L', 'R'}; void solve() { cin >> n >> m; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cin >> a[i][j]; if (a[i][j] == 'S') { sx = i, sy = j; } } } a[sx][sy] = '*'; int px = -1, py = -1; while (true) { bool wasMove = false; for (int i = 0; i < 4; i++) { int nx = sx + dx[i]; int ny = sy + dy[i]; if (nx < 0 || nx >= n || ny < 0 || ny >= m) { continue; } if (a[nx][ny] != '*') { continue; } if (nx == px && ny == py) { continue; } a[nx][ny] = '.'; px = sx, py = sy; sx = nx, sy = ny; cout << dir[i]; wasMove = true; break; } if(wasMove) { break; } } puts(""); }
座æšç·äžã«
nå¹ã®ç¬ã座ã£ãŠããã
içªç®ã®ç¬ã¯ç¹
x iã«ããŸãã ããã«ãã©ã€ã³äžã«é£ç©ãå
¥ã£ã
måã®ããŠã«ããããã©ã€ã³
u jäžã®å座æšãšæé
t jãããã£ãŠãããããããŠã«å
ã®é£ç©ã¯å·ããŠå³ããªããªããŸãã ããã¯ãç¬ãå³å¯ã«
t jããã倧ããæéã«ããŠã«ã«èµ°ã£ãå Žåãé£ã¹ç©ãå·ããŠç¬ãé£ã¹ãªãããšãæå³ããŸãã
åç¬ã1ã®é床ã§èµ°ãããšãèæ
®ããŠãé£ã¹ãããšãã§ããç¬ã®æ倧æ°ãèŠã€ããŸãã ç¬ãããªããæã瀺ãé¢ãŸã§èµ°ãããšãèæ
®ããŠãã ããã 2å¹ä»¥äžã®ç¬ã¯1ã€ã®ããŠã«ããé£ã¹ãããšãã§ããŸããã
ç¬ã¯äºãã«è¿œãè¶ãããšãã§ããŸããã€ãŸããç¬ã®1å¹ãé£ã¹ãã®ããããå Žåããã1å¹ã¯åœŒå¥³ã®ãã°ãéãéããŠå¥ã®ããŠã«ã«çãããšãã§ããŸãã
解決ç ã åããŠã«ãã»ã°ã¡ã³ã
[u j -t j ãu j + t j ]ãšããŠè¡šãããå Žåã
içªç®ã®ç¬ã¯ã
u j -t jâ€x iâ€u j + t jã§ããã°
jããŠã«ããé£ã¹ãããšãã§ããŸãã
ç§ãã¡ã¯ç±å¿ã«åé¡ã解決ããŸãã 巊端ã®ç¬ãšåœŒå¥³ãé£ã¹ãããšãã§ããããŠã«ãèããŠã¿ãŸãããã ãã®ãããªããŠã«ããªãå Žåãç¬ã¯é£ã¹ãããšãã§ããŸããã ããã§ãªãå Žåã¯ã巊端ã®ç¬ãå©çšã§ããããŠã«ãããå³ç«¯ã巊端ã®ããŠã«ãéžæããŸãã ããã«ããã®ç¬ãšãã®ããŠã«ãèæ
®ãããåæ§ã«æšè«ãç¶ããŸãã
ãã®ãããªæ¬²ãæé©ãªçãã«ã€ãªããããšã¯ç°¡åã«ããããŸãã
- 巊端ã®ç¬ãé£ã¹ãããšãã§ããå Žåããããé£ã¹ãããšã¯æå³ããããŸãããããã¯ã1ã€ã®ããŠã«ãåé€ãã1ã€ã®ããŠã«ãžã®åå¿ãæªåãããããã§ãã
- 巊端ã®ç¬ãé£ã¹ãããšãã§ããããŠã«ãæ€èšããŠãã ããã ãããã®ããŠã«ã¯ãã¹ãŠãæ®ãã®ç¬ãå©çšã§ããŸãããå³ã®å¢çç·ãå·Šã«é ãããç¬ã¯äŸå€ã§ãã ãããã£ãŠãããŠã«ãåãããå ŽåïŒãããŠããã€ã³ã1ããå®è¡ãã䟡å€ããããšæ¢ã«ç解ããŠããå ŽåïŒãå³ç«¯ãäžçªå·Šã®ããŠã«ãåãæ¹ãåçæ§ãé«ããããå³åŽã®ç¬ã®éžæãæªåãããããšã¯ãããŸããã
ãã®ã¿ã¹ã¯ã§ã¯ãä»ã®è²ªæ¬²ããæžãããšãã§ããŸãããå€ãã¯ééã£ãŠããŸãã
ãããå®çŸããããã«ãç¬ãšããŠã«ãïŒå·Šç«¯ããïŒå·Šããå³ã«äžŠã¹æ¿ããŸãã å·Šããå³ã«é²ã¿ããããŠã«ãåºçŸããŸãããïŒãã®å Žåããã®å³ç«¯ãããŒã¿æ§é ã«è¿œå ããŸãïŒããã³ãç¬ãåºçŸããŸãããïŒããŒã¿æ§é ã§ç¬ã«æãé©ãã巊端ãèŠã€ããå¿
èŠããããŸãïŒã®ã€ãã³ããåŠçããŸãã
é£æ床ïŒããŒã¿æ§é ã«å¿ããŠ
O ïŒ
n log
n ïŒãŸãã¯
O ïŒ
n ïŒïŒ* set *ãŸãã¯
queue ïŒã
C ++ãœãªã¥ãŒã·ã§ã³
ãœãªã¥ãŒã·ã§ã³äŸ const int N = 200200; int n, m; int x[N]; int u[N], t[N]; bool read() { if (!(cin >> n >> m)) return false; forn(i, n) assert(scanf("%d", &x[i]) == 1); forn(i, m) assert(scanf("%d%d", &u[i], &t[i]) == 2); return true; } pti segs[N]; void solve() { forn(i, m) segs[i] = mp(u[i] - t[i], u[i] + t[i]); sort(x, x + n); sort(segs, segs + m); int ans = 0; multiset<int> z; for (int i = 0, j = 0; i < n; ) { if (j < m && segs[j].x <= x[i]) { z.insert(segs[j].y); j++; } else { auto it = z.lower_bound(x[i]); i++; if (it != z.end()) { ans++; z.erase(it); } } } cout << ans << endl; }
éè² ã®æŽæ°
kããã³
nã®éè² ã®æŽæ°
a 1 ã
a 2 ã...ã
a nãäžãããã
å Žå ã ãããã®æ°åã®ããã€ããä»»æã®é åºã§æ¬¡ã
ãšæžãçããå Žåã«ãã£ãŠã¯ãããã®ããã€ããæ°å䜿çšãïŒãŸã£ãã䜿çšããªãïŒã
kã§å²ãåããæçã®ïŒæ°åã®æ°ã ãïŒæ°ã決å®ããå¿
èŠããããŸãããã¯äžå¯èœã§ãã
解決çã ãã€ã§ãçããäœæãããšãã¯ãçŸåšã®ãã¬ãã£ãã¯ã¹ã
kã§å²ã£ãæ®ãã ã
ãéèŠã§ããããšã«æ³šæããŠãã ããã å®éãçŸåšã®å¿çãã¬ãã£ãã¯ã¹ã«
rã«çãã
kã§å²ã£ãäœããããå Žåããã¬ãã£ãã¯ã¹ã«æ°å€
a iãå²ãåœãŠããšããã®äœãã¯æ°å€
rã® kã§å²ã£ãäœãã«çãããªã
ãŸããâ¢10 l i + a i ïŒ
l iã¯ã¬ã³ãŒãã®æ¡æ°çªå·
a i ïŒã
次ã«ãæããã«ãã¬ã³ãŒãå
ã®æå°æ¡æ°ã䜿çšãããã®ãããªæäœã«ããé€ç®ããå°äœãååŸããããšã«é¢å¿ããããŸãã ãã¡ããã空ã®ãã¬ãã£ãã¯ã¹ã䜿çšããŠããã«å°äœ0ãååŸã§ãããããå°äœ0ã«ã€ããŠã¯2çªç®ã«å€§ããçãã«é¢å¿ããããŸãã
äžèšã®ãã¹ãŠã«ããã
ké ç¹ïŒããããã0ãã
k -1ãæ®åºïŒã§ã°ã©ããäœæã§ããŸãããã®ãšããžã¯ãçªå·
a iã«ãã£ãŠæ±ºå®ãããŸãïŒé ç¹
vããé ç¹ãŸã§

ããã¯ãé·ãã
l iã®å Žåã
l iæ¡ãè¿œå ããããšã«ãããå°äœ
vã®ãã¬ãã£ãã¯ã¹ããå°äœ
uã®ãã¬ãã£ãã¯ã¹ãååŸã§ããããšãæå³ããŸãã ãã®ã°ã©ãã®äžéšã®
a iãåããšããžïŒçŸåšã¯
nk ïŒã«å¯Ÿå¿ããããšã«æ°ä»ãã®ã¯ç°¡åã§ã-ãããã¯åã10é²è¡šèšãš
kã«ããé€ç®ã®æ®ãã®æ°å€ã§ããããããã®åºæºã§äžæã®æ°å€ã®ã¿ãæ®ãå¿
èŠããããŸãïŒãããŸããïŒ 10
kãè¶
ããïŒããšããžã®æ°ã¯10
k 2ãè¶
ããŸããã
ããã§å¿
èŠãªã®ã¯ãæ§ç¯ãããã°ã©ãã§é ç¹0ããããèªäœãŸã§ã®æçã®ç©ºã§ãªããã¹ã®é·ããèŠã€ããããšã§ãã ãã®ãããªäžå¿«ãªåŸªç°ãé¿ããããã«ãé ç¹0ãšåãåºåãšããžãæã€è¿œå ã®é ç¹
kãè¿œå ããŸãããã®ãããªå°äœã«ã¯ç©ºã®ãã¬ãã£ãã¯ã¹ããä»ããããªããšä»®å®ããŸãã ããã§ãåé¡ã¯é ç¹
kããé ç¹0ãŸã§ã®æççµè·¯ãèŠã€ããããšã«ãªãã
OïŒk 2 ïŒã®ãã€ã¯ã¹ãã©ã®ã¢ã«ãŽãªãºã ã§è§£æ±ºã§ããŸãã ãã ããåé¡ã®ç¹ç°æ§ã«ãããçè«çã«ã¯å€§ããª
OïŒk 3 ïŒãæã£ãŠããŸãããFord-Bellmanã¢ã«ãŽãªãºã ïŒæ£ããã«ãããªãã䜿çšïŒã«ãããœãªã¥ãŒã·ã§ã³ããã¹ãŠã®ãã¹ãã«åæ ŒããŸãã
åé¡ã®åçã®å埩ã¯ãæçåçã§å¿
èŠãªé·ç§»ãè¡ããããšããžã圢æããåé ç¹ã®è¿œå çªå·ãä¿åããããšãé€ããŠãããªãæšæºçã§ãã
ãã€ã¯ã¹ãã©ã¢ã«ãŽãªãºã ãœãªã¥ãŒã·ã§ã³
ãœãªã¥ãŒã·ã§ã³äŸ for (int i = 0; i < n; ++i) { int x; assert(scanf("%d", &x) == 1); any[x % k][length(x)] = x; } p10[0] = 1; for (int i = 0; i + 1 < P; ++i) p10[i + 1] = (p10[i] * 10) % k; for (int i = 0; i <= k; ++i) { d[i] = int(1e9); p[i] = -1; used[i] = false; } d[k] = 0; while (true) { int v = -1; for (int i = 0; i <= k; ++i) if (!used[i] && (v == -1 || d[v] > d[i])) v = i; if (v == -1) break; if (v == 0) break; used[v] = true; for (int r = 0; r < k; ++r) for (int l = 0; l < P; ++l) if (any[r][l] != -1) { int to = (v * p10[l] + r) % k; if (d[to] > d[v] + l) { d[to] = d[v] + l; p[to] = v; w[to] = any[r][l]; used[to] = false; } } } if (p[0] == -1) { puts("NO"); } else { puts("YES"); vector <int> res; int v = 0; do { res.push_back(w[v]); v = p[v]; } while (v != k); reverse(res.begin(), res.end()); for (auto x: res) printf("%d", x); }
Polycarpã¯ãããã°ã©ããŒããã³åŠäœ2ã®ãã¡ã³ã«ãªãããšã倢èŠãŠããŸãã 2ã€ã®æ°åã®äžã§ã圌ã¯æ°å2ã®å€§ããªåã§å²ã£ãæ°åã奜ãã§ãã
æ£ã®æŽæ°
a 1 ã
a 2 ã...ã
a nã®ã·ãŒã±ã³ã¹ãäžããããå Žåã
r-ã·ãŒã±ã³ã¹å
ã®æ°åã®å°ãªããšã1ã€ãå²ãåããæ倧次æ°2ãèŠã€ããå¿
èŠããããŸãã ããã«ã
rã§å²ã£ãæ°
a iã®æ°ãå°å·ããå¿
èŠããããŸãã
解決çã ãã®åé¡ã解決ããã«ã¯ã2ã®ã¹ãä¹ãæ¥éã«å¢å ãã10
9ãè¶
ããªãæ°ãåå²ã§ãã2ã®æ倧次æ°ã29ã§ãããšããäºå®ãå©çšããå¿
èŠããããŸãããããã£ãŠãçŸåšã®æ°ãåå²ããã2ã®æ倧次æ°ãèŠã€ããå¿
èŠããããŸãããã®æ倧次æ°ã§åçãæŽæ°ããŸãã
ãœãªã¥ãŒã·ã§ã³äŸ int n, x; int main() { cin >> n; int ans = -1, cnt = 0; for (int i = 0; i < n; i++) { cin >> x; int cur = 1, power = 0; while (true) { cur *= 2; if (x % cur) break; power++; } if (ans < power) { ans = power; cnt = 1; } else if (ans == power) { cnt++; } } cout << ans << ' ' << cnt << endl; }
nã®å
¥ãå£ã®å®¶ããããåå
¥ãå£ã«ã¯
méããããåå
¥ãå£ã®åéã«ã¯æ£ç¢ºã«
kã®ã¢ããŒãããããŸãã ãããã£ãŠããã®å®¶ã«ã¯
nâ¢mâ¢kã®ã¢ããŒãã¡ã³ããããããŸããã èªç¶ã«1ãã
nâ¢mâ¢kã®çªå·ãä»ããã
ãŸããã€ãŸããæåã®å
¥ãå£ã®1éã®æåã®ã¢ããŒãã®çªå·ã¯1ãæåã®å
¥ãå£ã®2éã®æåã®ã¢ããŒãã®çªå·ã¯
k + 1ãšãªããŸãã ãã®å®¶ã®ç¹åŸŽã¯äžžãããšã§ãã ã€ãŸããæèšåãã«ç§»åãããšãå
¥å£çªå·1ã®åŸã«å
¥å£çªå·2ããããå
¥å£çªå·3ãç¶ããå
¥å£çªå·
nãŸã§ç¶ããŸãã å
¥å£çªå·
nã®åŸã«ãåã³å
¥å£çªå·1ããããŸãã
ãšãã¯ãŒãã¯ã¢ããŒãaã«ããã¿ãŒã·ã£ã¯ã¢ããŒã
bã«äœãã§ããŸãã 1éãžã®é段ã®äžäžãžã®é·ç§»ã«ã¯5ç§ããããå
¥ãå£ã®ãã¢ããé£ã®å
¥ãå£ã®ãã¢ãžã®é·ç§»ã«ã¯15ç§ãããã1ã€ã®å
¥ãå£ã®åãéå
ã§ã®é·ç§»ã¯å³åº§ã«çºçããŸãã ãŸãã家ã®ãã¹ãŠã®å
¥ãå£ã«ãšã¬ããŒã¿ãŒããããŸãã ããã¯æ¬¡ã®ããã«é
眮ãããŠããŸããããã¯åžžã«åŒã³åºãã®10ç§åŸã«å°çããä¹å®¢ã1éäžãŸãã¯äžã«åããããã«ããšã¬ããŒã¿ãŒã¯1ç§ãè²»ãããŸãã çéžãšçéžã¯å³åº§ã«è¡ãããŸãã
ãšãã¯ãŒãããã¿ãŒã·ã£ã®ã¢ããŒããŸã§ã®æçæéãèŠã€ããã®ãæäŒã£ãŠãã ããã ãšãã¯ãŒãã¯ã察å¿ããå
¥ãå£ã®1éããã®ã¿å
¥ãå£ãåºãããšãã§ããããšãèæ
®ããŠãã ããïŒããã¯å³åº§ã«èµ·ãããŸãïŒã ãšãã¯ãŒããäœããã®å
¥ãå£ã®ãã¢ã®åã«ç«ã£ãŠããå Žåã圌ã¯ããã«å
¥ãããã®å
¥ãå£ã®1éã«ããã«çŸããããšãã§ããŸãïŒãããå³åº§ã«èµ·ãããŸãïŒã ãšãã¯ãŒãã¯å®¶ãã©ã®æ¹åã«åãããéžæã§ããŸãã
解決çã ãã®åé¡ã解決ããã«ã¯ãæ¡ä»¶ã«æžãããŠããããšãæ
éã«å®è£
ããå¿
èŠããããŸããã äž»ãªé£ããã¯ãã¢ããŒãçªå·ã«ãã£ãŠå
¥ãå£çªå·ãšéçªå·ã決å®ããããšã§ããã ããã¯æ¬¡ã®ããã«è¡ãããšãã§ããŸãã家ã®å
¥ãå£ã
nå ãåå
¥ãå£ã
méãåéã
kåã®ã¢ããŒãã®å Žåãã¢ããŒãçªå·
aã¯å
¥ãå£çªå·ïŒ
a -1ïŒ/ïŒ
mâ¢k ïŒã«ãããããã¢çªå·
ïŒïŒa-1ïŒïŒ
ïŒmâ¢kïŒïŒ/ k ãããã³ãããã®çªå·ã¯0ã§ã€ã³ããã¯ã¹ä»ããããŠãããããã«èšç®ããã®ã«äŸ¿å©ã§ãã å
¥ãå£ãšéæ°ã決å®ããåŸã2ã€ã®ã±ãŒã¹ãæ€èšããå¿
èŠããããŸããïŒãšãã¯ãŒããšãã¿ãŒã·ã£ã®å
¥ãå£çªå·ãçããå ŽåïŒãã®åŸããšã¬ããŒã¿ãŒã«ä¹ãã®ãšé段ãäžäžããã®ã«ã©ã¡ããæé©ããéžæããå¿
èŠããããŸããïŒããã³ãããã®æ°ãç°ãªãå Žå家ãäžžãããšããããŠæ£ããæ¹åãéžæããŠãã ããïŒã
ãœãªã¥ãŒã·ã§ã³äŸ int n, m, k, a, b; int main() { cin >> n >> m >> k >> a >> b; a--, b--; int p1 = a / (m * k), p2 = b / (m * k); int f1 = (a % (m * k)) / k, f2 = (b % (m * k)) / k; if (p1 == p2) { cout << min(abs(f1 - f2) + 10, abs(f1 - f2) * 5) << endl; } else { if(p1 > p2) swap(p1, p2); cout << min((p2 - p1) * 15, (p1 + n - p2) * 15) + min(f1 * 5, 10 + f1) + min(f2 * 5, 10 + f2) << endl; } }
NããŒã ãããã°ã©ãã³ã°ã³ã³ãã¹ãã®æºåã®ããã«ãã¬ãŒãã³ã°ã«åå ããŸããã åããŒã ã®ã³ãŒãããã¬ãŒãã³ã°ãåãã
içªç®ã®ããŒã ã®ã¿ã¹ã¯ã®ã»ããã¯
iããŒãžãåããŸãã ãã¬ãŒããŒã«ã¯ãäž¡é¢ãããããª
xæã®çšçŽãšçé¢ã ããããããª
yæã®çšçŽããããŸãã æåã®ã¿ã€ãã®ã·ãŒãã«æ¡ä»¶ãå°å·ããå Žåãã¿ã¹ã¯ã®æ¡ä»¶ãã2ããŒãžãå°å·ã§ããŸãã2çªç®ã®ã¿ã€ãã®ã·ãŒãã«å°å·ããå Žåã¯1ããŒãžã®ã¿ã§ãã ãã¡ããã2ã€ã®ç°ãªãã¿ã¹ã¯ã»ããã®æ¡ä»¶ãã·ãŒãã«å°å·ããããšã¯ã§ããŸããã äž¡é¢ãããããªã·ãŒãã䜿çšããå Žåãäž¡é¢ã«ç¶æ
ãå°å·ããå¿
èŠã¯ãªããçæ¹ãããããªãŸãŸã§ããå¯ââèœæ§ãããããšã«æ³šæããŠãã ããã
ã³ãŒããå®å
šãªã¿ã¹ã¯ã»ãããå°å·ã§ããããŒã ã®æ倧æ°ã決å®ããå¿
èŠããããŸãã
解決çã ãŸããã¿ã¹ã¯ã»ããã®æå®ããããµã€ãºãæžå°ããªãé åºã§äžŠã¹æ¿ããŸãã 次ã«ãã¿ã¹ã¯ã»ããã®äžŠã¹æ¿ããæå°ã®ãã®ããéå§ããå¿
èŠããããŸãã çŸåšã®ã»ãããå°å·ã§ããªãå Žåã次ã®ã»ããã¯å°å·ããããšãä¿èšŒã§ããŸããããã®ãããåçãå°å·ããŠã¢ã«ãŽãªãºã ãçµäºããå¿
èŠããããŸãã ããã§ãªãå Žåã¯ãçŸåšã®ã»ãããå°å·ããåçã1ã€å¢ãããŠæ¬¡ã®ã»ããã«é²ãå¿
èŠããããŸãã åã»ããã¯ã次ã®ããã«æé©ã«å°å·ãããŸãã
xãäž¡é¢ã·ãŒã
ã®æ®ãã®æ°ã
yãçé¢ã·ãŒã
ã®æ®ãã®æ°ã
aãçŸåšã®ã¿ã¹ã¯ã»ããã®ããŒãžæ°ãšããŸãã
x = 0ããã³
y = 0ã®å ŽåãçŸåšã®ã»ãããå°å·ããããšã¯ã§ããŸããã
aãå¥æ°ã§
y > 0ã®å Žå
ãçé¢ã·ãŒãã«1ããŒãžãå°å·ãã
aããã³
yã1ã€æžãããŸãããã以å€ã®å Žå
ãaãå¥æ°ã§
x > 0ã®å Žå
ãäž¡é¢ã·ãŒãã«1ããŒãžãå°å·ãïŒããã¯äœ¿çšããŸããïŒã
aããã³
xãåæžããŸããŠãããããšã çŸåš
ãaã¯åžžã«å¶æ°ã§ãã ãããã£ãŠãæåã«äž¡é¢ã·ãŒããå°å·ã«äœ¿çšããååãªã·ãŒãããªãå Žåã¯çé¢ã·ãŒãã䜿çšããããšãæå©ã§ãã çé¢ã·ãŒããååã«ãªãå ŽåãçŸåšã®ã»ãããå°å·ã§ããŸããã
ãœãªã¥ãŒã·ã§ã³äŸ int n, x, y; int a[N]; bool can(int a) { if (a % 2) { if (y > 0) a--, y--; else if (x > 0) a--, x--; else return false; } if (x * 2 >= a) { x -= a / 2; return true; } a -= 2 * x, x = 0; if (y >= a) { y -= a; return true; } return false; } int main() { cin >> n >> x >> y; for (int i = 0; i < n; i++) cin >> a[i]; sort(a, a + n); int ans = 0; for (int i = 0; i < n; i++) if(can(a[i])) ans++; else break; cout << ans << endl; }
ã³ã³ãã¥ãŒã¿ãŒã®ã¡ã¢ãªã¯ã1åã«é
眮ããã
nåã®ã»ã«ã§æ§æãããŸãã ã»ã«ã«å·Šããå³ã«
1ãnã®çªå·ãä»ããŸãã åã»ã«ã«ã€ããŠããããããªãŒã§ãããããŸãã¯ä»»æã®ããã»ã¹ã«å±ããŠãããã©ãããããããŸãïŒãã®å Žåãå±ããã»ã«ã¯ããã£ãŠããŸãïŒã
åããã»ã¹ã§ã¯ãããã«å±ããã»ã«ãã¡ã¢ãªå
ã®é£ç¶ããã»ã¯ã·ã§ã³ãå ããããšãç¥ãããŠããŸãã ãããžãŒã»ã«ãã空ãã»ã«ã«ããŒã¿ãæžãæããçŸåšã¯ããžãŒãªã»ã«ã空ããšèŠãªããã¿ã€ãã®æäœã䜿çšããŠãããã»ã¹ã«å±ãããã¹ãŠã®ã»ã«ãã³ã³ãã¥ãŒã¿ãŒã®ã¡ã¢ãªã®å
é ã«é
眮ããå¿
èŠããããŸãã , ( ) .
, . , , . , ,
i ,
j , .
, , - .
解決çã , . , , ( ) , . : , pos1 pos2 , pos1 , pos2 , pos1. , â , - , , ( , ).
int n; int a[N], need[N]; int szneed; int main() { cin >> n; for (int i = 0; i < n; i++) { cin >> a[i]; if (a[i] != 0) need[szneed++] = a[i]; } int ans = 0; for (int i = 0; i < n; i++) { if (need[i] != 0 && need[i] != a[i]) ans++; } cout << ans << endl; }
n . , , .
, ,
x i , . ,
d i ,
i - . ,
i -
x i + d i . , , .
, , a . . , .
, a . , . , a .
, ( ) . - , , , , .

. , â , , . , a .
. mid â . cnt â , . set'a, , , .
( , ). set' , , , set ans. , set' , , set' .
, set' ans. ans
a , mid , mid . ans.
int n, a; vector<pair<pair<int, int>, int > > v; set<pair<int, int> > s; vector<int> ans; int ok (int x) { s.clear(); ans.clear(); for (int i = 0; i < n; i++) { int l = v[i].first.first, r = v[i].first.second; while (!s.empty() && s.begin()->first <= l) { ans.push_back(s.begin()->second); s.erase(s.begin()); } if ((int)s.size() + 1 <= x) s.insert(mp(r, v[i].second)); else { s.insert(make_pair(r, v[i].second)); set<pair<int, int> > :: iterator it = s.end();--it; s.erase(it); } } while (!s.empty()) { ans.push_back(s.begin()->second); s.erase(s.begin()); } return (int)ans.size(); } int main() { cin >> n >> a; v.resize(n); for (int i = 0; i < n; i++) cin >> v[i].first.first >> v[i].first.second, v[i].first.second += v[i].first.first, v[i].second = i; sort(v.begin(), v.end()); int l = 0, r = a; while (r - l > 1) { int mid = (l + r) / 2; if(ok(mid) >= a) r = mid; else l = mid; } ok(r); cout << r << endl; for (int i = 0; i < a; i++) cout << ans[i] + 1 << ' '; cout << endl; }
ã§ã¯æåã®äºéžã©ãŠã³ãã® 929人ãåå ããŸãããæè¯ã®çµæ㯠Vladislav MakeevïŒã¢ã¹ã¯ã¯ããã·ã¢ïŒã«ãã£ãŠç€ºãããŸããã2äœãš3äœã¯ããã¹ãã£ã¹ã©ãã»ããªãã³ïŒãã·ã¢ãã¹ã¿ãŽãããªïŒãšããŒããŽã«ãããïŒã¢ã¹ã¯ã¯ããã·ã¢ïŒãç²åŸããŸããã2åç®ã®äºéžã§ã¯686人ãéãŸããŸãããæ Œå·®ã倧ããã®ã§ãè©äŸ¡è¡šã® 1äœã¯ Vlad MoskoïŒãã¡ãªããã©ã«ãŒã·ïŒã§ããã2äœããã³3äœ-ãã¶ã«ãã¯ã¢ã«ãã£ãã€ïŒã«ã¶ãã¹ã¿ã³ãã¢ã¯ããïŒããã³ãŠã©ãžããŒã«ããããïŒã¢ã¹ã¯ã¯ããã·ã¢ïŒãããäžåºŠãç§ãã¡ã¯ãã¹ãŠã®ãã¡ã€ããªã¹ããç¥çŠããæ¥å¹Žã®æ°ããåå è
ã楜ãã¿ã«ããŠããŸãã