tozangezan's diary

勝手にソースコードをコピペして利用しないでください。

PKU

PKU 3581: Sequence

PKU

サの練習。蟻本みて書いた。勉強しないといけないですね。 PKUにはこの手の問題が大量にある。 #include<stdio.h> #include<algorithm> using namespace std; int b[410000]; int c[410000]; int z[410000]; int n; int k; int rank[410000]; int tmp[410000]; int sa[410000]; bo</algorithm></stdio.h>…

PKU4040 Non-negative Partial Sums

PKU

こんなのsegment treeでO(n log n)で余裕だな!とやってたらずっとTLEしていて頭が悪い… [0,a]と[b,n]のクエリしか使わないんだから線形でしょうに・・・ #include<stdio.h> #include<algorithm> using namespace std; int b[1100000]; char str[5000000]; int sz; int c[1048576</algorithm></stdio.h>…

PKU3377 Ferry Lanes

PKU

最大で折り返すのは2回です。ちゃんと向きとかも考えるとまわす回数は4回ですよね。(3回にしていた・・・) この問題の最もクソなところは制約が怪しいところだと思う。答えがsigned-64bitに収まると言われてもinfすら決められないんだが… #include<stdio.h> #include<algorithm></algorithm></stdio.h>…

PKU3419 Difference Is Beautiful

PKU

数年間の誤読の末AC. PKUの中でも超良問の類だと思う。両端の強引な帳尻合わせが最高にCool. #include<stdio.h> #include<algorithm> using namespace std; int segtree[524288]; int query(int a,int b,int c,int d,int e){ if(d</algorithm></stdio.h>

PKU 4043 Remoteland

PKU

概要:1~nまでの異なる数をいくつかかけて最大になる平方数作ってね 解法:n!の素因数分解で出てくる指数を考える。偶数ならそれは問題ないし、奇数ならそこだけ1でほか0の数(いわゆる素数)で1回だけ割ればよいので、素因数ごとに独立に計算できる。Java逃…

PKU 3726 Windy's ABC

PKU

こういう文字が3種類ある問題はコードが3倍になるので嫌いであるということを報告しておきます。 必要な配列のサイズが入力依存で形が変わって(A+B+C=500でA*B*C必要)すべてを1回の宣言で網羅しようとするとMLEするので今回はJavaで。 import java.util.*; c…

PKU 3225 Help with Intervals

PKU

遅延系のsegtreeの練習を定期的にしている気がする。 し、デバッグに時間がかかりました。 やることは区間に1を代入、0を代入、xorだけで十分。ほかのはこの三つの組み合わせでいける。というか2つで(1を代入とxor)十分だと思う。 #include<stdio.h> #include<algorithm> using n</algorithm></stdio.h>…

PKU2134 Traffic Lights

PKU

ようやく通った… 100人目のACです。問題文にかかれていない注意点: ・最初は速度が0なので、動けるようになるまで1秒かかります。すなわち開始から1秒後はかならず場所0にいます。 ・最後は速度1で入ってきてもゴール地点で0になるので大丈夫です。 ・最後…

PKU 2886 Who Gets the Most Candies?

PKU

削除のある配列のi番目をlogでわかるようにする。 Segment Treeの典型。IOI2012のpracticeでも本番でもこんなの書いた覚えがある。 #include<stdio.h> #include<algorithm> using namespace std; char str[500010][16]; int c[500010]; int v[500010]; int segtree[1048576]; voi</algorithm></stdio.h>…

PKU 3301 Texas Trip

PKU

点が与えられるのでそれらを含む最小の正方形は?二分探索して角度をがんばって決める。まじめに考えるのが面倒だし制約が小さかったので大量に区間を追加して楽した。 二分探索の回数が足りなくて(30回)誤差死した #include<stdio.h> #include<algorithm> #include<math.h> #include<complex> usi</complex></math.h></algorithm></stdio.h>…

PKU 3016 K-Monotonic

PKU

単調増加列用と単調現象列用にすこしずらした配列を持ってあとは典型的なやつ。 あとはまとめて計算してオーダーを落とすタイプのDP。 #include<stdio.h> #include<algorithm> using namespace std; int c[1500]; // use in increasion int d[1500]; // use in decreasion int C[</algorithm></stdio.h>…

PKU3613 Cow Relays

PKU

この手の問題は大嫌いです。 http://www.ioi-jp.org/ioi/2011/tasks/day1/garden.html に似ています。やることは最初と最後だけまじめに計算して間がループの繰り返しであることを利用して適当にサボるだけです。 #include<stdio.h> #include<algorithm> #include<queue> using namespac</queue></algorithm></stdio.h>…

PKU 3667 Hotel

PKU

疲れる問題でした。解法 「空所の左端の位置」「空所の右端の位置」「空所のサイズ(左端だけもっている)」を遅延更新するsegtreeで持つ。 WAの原因はホテルに人を入れるときの「空所の左端の位置」を人数分右にずらすのを忘れていたからでした。 #include<stdio.h> #i</stdio.h>…

PKU3271 Lilypad Pond

PKU

ついに解けました。 解法はBFS+DP。何となくJOI 2011のOrienteeringを彷彿とさせる面倒な問題です。 ちなみにBFSの「1回みたところはもうみない」を忘れてREとTLE量産していて初心者すぎた。 #include<stdio.h> #include<algorithm> #include<queue> using namespace std; int c[35][35]</queue></algorithm></stdio.h>…

PKU2777 Count Color

PKU

数年前からそろそろ解かねばなあということで思っていたのでついに解きました。 遅延更新のsegtreeってこう書くんですね。なれとかないと。 ちなみにクエリで与えられる範囲の値が左右逆になることもあるらしいです。普通気がつかないと思う。 #include<stdio.h> #inc</stdio.h>…

PKU 3168

PKU

ついにBarn Expansionが解けました。 解法: よく考えたらこれ可変長じゃなくて入力によってサイズが変わるので二次元配列にしづらい配列の間違いでした (もちろんvectorはTLEするし、いつもの隣接リストではソートできません)配列のサイズが最初で全部決め…

PKU 3422, 2762

PKU

久しぶりにPOJ Monthlyでもやってみようと思ってやることにしました。3422: Kaka's Matrix Travels いつしかこのブログに書いたはずのDiv1Hardとほとんど同じ問題です。まったく同じ最小費用流をすれば解けます。 #include <vector> #include <algorithm> #include <iostream> #include <queue> #</queue></iostream></algorithm></vector>…

PKU 1991 Turning in Homework

PKU

左右をもつタイプのDP。 結構大変ですが、なんとかはなります。 #include<stdio.h> #include<algorithm> using namespace std; pair<int,int> p[1000]; int t[1001]; int dp[1001][1001][2]; int ABS(int a){return max(a,-a);} int main(){ int a,b,c; scanf("%d%d%d",&a,&b,&c); for(int</int,int></algorithm></stdio.h>…

PKU 2185 Milking Grid

PKU

KMP.久しぶりにオンラインジャッジをやるにはいい問題だと思います。これでPKUのUSACO Unsolvedは16→13に。 #include<stdio.h> #include<algorithm> using namespace std; char str[10000][76]; int fail[10001]; int main(){ int a,b; scanf("%d%d",&a,&b); for(int i=0;i</algorithm></stdio.h>

USACO Unsolved

PKU

7問残っています。 3667 Hotel 2042 USACO 2008 February Gold 2185 Milking Grid 1279 USACO 2003 Fall 3613 Cow Relays 1053 USACO 2007 November Gold 3167 Cow Patterns 536 USACO 2005 December Gold 3168 Barn Expansion 311 USACO 2005 December Gold…

PKU 1743:Musical Theme

PKU

概要 O(N log^2 N)くらいで繰り返しとなる数列(平行移動できる)を求めてください。一般人の解法 さtozangezanの(嘘)解法 ロリハ。いろんなkeyでやったら衝突したしkey2つにしたらTLEが見えているのでkey1つとkeyを1にしたような謎hashでkey1.5みたいなよくわ…

1198: Solitaire

PKU

もうすこし真面目に考えてからソースを書くことにします #include<stdio.h> #include<algorithm> #include<queue> using namespace std; struct wolf{ int depth; int r[4]; int c[4]; wolf(){} wolf(int a,int b,int C,int d,int e,int f,int g,int h,int D){ r[0]=a; c[0]=b; r[1]=C; </queue></algorithm></stdio.h>…

PKU 1625: Censored!

PKU

ここまでひどい悪問も珍しい。問題のタイトルどおりCensored!されるべき悪問。概要 とりあえずAho-Corasickでも書いてDPしてくださいね。あと、long longなんてものには入らないし答え最大で80桁越えるのでおとなしく多倍長使ってください。一般人の発想 と…

PKU 2100: Graveyard Design

PKU

概要: ある数aが与えられるので、 であらわせるものをすべて出力せよ。解法: 基本的にはしゃくとり法でいけます。 を用意してを計算するとかやりたくなりますが、 よく考えるとくらいなのでオーバーフローします。 ここで普通に足し算引き算してやれば解け…

PKUについて紹介

見出しの使い方がわかりません。この記事がCompetitive Programming Advent Calendarの23日目の記事に当たります。JOIについてはあんまり見つからないので、PKUについて紹介したいと思います。PKUというのは(よくPOJという名前で聞く人が多いかもしれません…

PKU 2220:Treasure Hunters

PKU

なんとかして1000ACを達成。これからも代表になれるまでがんばります。DFSをするだけです。枝刈りもいらないみたい。 #include<stdio.h> #include<algorithm> using namespace std; char str[6]; int p,q; int dat[6][8]; int c[6]; int val[8]; int best[8]; int ret; void dfs(</algorithm></stdio.h>…

PKU 3042:Grazing on the Run

PKU

みなさんはくれぐれもこんなソースを書かないようにしましょう。 やってることは区間DP #include<stdio.h> #include<algorithm> #include<queue> using namespace std; pair<long long,long long> dp[1000][1000][2]; bool in[1000][1000][2]; int dat[1000]; struct wolf{ int left; int right; int LR; wolf</long></queue></algorithm></stdio.h>…

PKU 3579: Median

PKU

いい問題だと思います。+1やら やってることは二分探索してほげってるだけです。 #include<stdio.h> #include<algorithm> using namespace std; int a; int dat[100000]; long long count(int b){ int left=0; int right=1; long long ret=0; while(right<a){ while(dat[right]-dat[left]>b)left++; ret+=right-le</a){></algorithm></stdio.h>…

PKU 2482 Stars in Your Window

PKU

考えずとも解ける簡単な平面走査をしていました。この類はいくらでも過去問ある気がする。解法:問題の図を見て直感的にコードを書く #include<stdio.h> #include<algorithm> using namespace std; long long p[10000]; long long q[10000]; int r[10000]; int segtree[65536]; l</algorithm></stdio.h>…

PKU3269: Building A New Barn

PKU

解法が面白かったのであげておきます。概要n個の点(n ある点を定めて小屋を置く。牛がいるところには小屋は置けない。一番いい場所というのは、小屋とそれぞれの牛たちのマンハッタン距離の和が最小になる点である。 一番いい小屋の位置においたときのマンハ…