Bestcoder

Solved Problems
Clarke and food
Clarke and five-pointed star

Clarke and food

非常轻易地完成填充。

Clarke and five-pointed star

辛辛苦苦地敲完了又挂了。。。

我这里独立思考得到的结论是:
以五角星的一个顶点为参考点,则该点必在其他四点所构成的四边形之外,且其他四点相对于该点所成的张角之和是确定的;尽管随着所取的四个点的顺序不同会有不同的值,但也仅有三种情况。
可是测样例数据时不知怎的多加了一个待判值,结果WA了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/**
* Nov 14, 2015 7:35:56 PM
* PrjName: Bc62-02
* @semprathlon
*/
import java.io.*;
import java.util.*;
public class Main {
static Point[] pt=new Point[5];
static PrintWriter out=new PrintWriter(System.out);
static boolean check1(){
return !Point.isPointInRect(pt[0], pt[1], pt[2], pt[3], pt[4])&&
!Point.isPointInRect(pt[1], pt[2], pt[3], pt[4], pt[0])&&
!Point.isPointInRect(pt[2], pt[3], pt[4], pt[0], pt[1])&&
!Point.isPointInRect(pt[3], pt[4], pt[0], pt[1], pt[2])&&
!Point.isPointInRect(pt[4], pt[0], pt[1], pt[2], pt[3]);
}
static boolean check0(Point p,Point a,Point b,Point c,Point d){
double v1=Math.acos(-1.0)/5.0,v2=v1*2.0,v3=v1*3.0;
double angle=Vector.angle2(p, a, b)+Vector.angle2(p, b, c)+Vector.angle2(p, c, d);
angle=Math.abs(angle);
// out.println(v1+","+v2+","+v3+","+angle);
return Point.dcmp(angle-v1)==0||Point.dcmp(angle-v2)==0||Point.dcmp(angle-v3)==0;
}
static boolean check2(){
return check0(pt[0], pt[1], pt[2], pt[3], pt[4])&&
check0(pt[1], pt[2], pt[3], pt[4], pt[0])&&
check0(pt[2], pt[3], pt[4], pt[0], pt[1])&&
check0(pt[3], pt[4], pt[0], pt[1], pt[2])&&
check0(pt[4], pt[0], pt[1], pt[2], pt[3]);
}
public static void main(String[] args) throws IOException{
InputReader in=new InputReader(System.in);

int T=in.nextInt();
while(T-->0){
for(int i=0;i<5;i++)
pt[i]=new Point(in.nextDouble(), in.nextDouble());
if (pt[0].equals(pt[1])&&pt[1].equals(pt[2])&&pt[2].equals(pt[3])&&pt[3].equals(pt[4])&&pt[4].equals(pt[0])){
out.println("Yes");continue;
}
out.println(check2()?"Yes":"No");
}
out.flush();
out.close();
}
}

Bestcoder

Solved Problems
Numbers
Game
Subtrees

Numbers

可能需要两个特判?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/**
* Oct 31, 2015 7:01:33 PM
* PrjName: Bc61-01
* @semprathlon
*/
import java.io.*;
import java.util.*;
public class Main {
static int maxl=1001;
static int[] f=new int[maxl];
static Vector<Integer> v=new Vector<Integer>();
public static void main(String[] args) throws IOException{
InputReader in=new InputReader(System.in);
PrintWriter out=new PrintWriter(System.out);
while(in.nextLine()!=null){
int n=in.nextInt();
// if (n<1) continue;
boolean has1=false,has2=false,has=false;;
Arrays.fill(f, 0);
for(int i=1;i<=n;i++){
int k=in.nextInt();
f[k]++;
if (f[k]>1&&k>0) has1=true;
if (f[k]>2) has2=true;
}
v.clear();
for(int i=0;i<maxl;i++)
if (f[i]>0)
v.add(i);
// for(Integer e:v.toArray(new Integer[0]))
// out.print(e+" ");
if (v.get(0)==0&&has1||has2){
out.println("YES");continue;
}
Integer[] a=v.toArray(new Integer[0]);
for(int i=0;i<a.length-1;i++)
if (!has)
for(int j=a.length-1;j>i;j--){
int k=Arrays.binarySearch(a, a[j]-a[i]);
if (k>i&&k<j){
has=true;break;
}

}
out.println(has?"YES":"NO");
}
out.flush();
out.close();
}
}

Game

各种分类讨论,但就是要写好最边缘的特判。。。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/**
* Oct 31, 2015 7:28:53 PM
* PrjName: Bc61-02
* @semprathlon
*/
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException{
InputReader in=new InputReader(System.in);
PrintWriter out=new PrintWriter(System.out);
while(in.nextLine()!=null){
int n=in.nextInt();
int s=in.nextInt();
int t=in.nextInt();
if (s==t){
out.println(n>1?-1:0);continue;
}
if (t==1){
if (s==n)
out.println(0);
else if (s==2)
out.println(1);
else
out.println(2);
}
else if (t==n){
if (s==1)
out.println(0);
else if (s==n-1)
out.println(1);
else
out.println(2);
}
else{
if (s==t+1||s==t-1||s==1||s==n)
out.println(1);
else
out.println(2);
}
}
out.flush();
out.close();
}

}

Subtrees

有些查找行为显然拖慢时间以致TLE。。。
有一个重要优化是从小到大枚举子树大小而不是相反方向;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/**
* Nov 7, 2015 10:31:31 PM
* PrjName: hdu5524-3
* @semprathlon
*/
import java.io.*;
import java.util.*;
public class Main {
static int maxn=64;
static long[] p2;
static HashSet<Long> st=new HashSet<Long>();
static PrintWriter out=new PrintWriter(System.out);
static void solve(long n){
if (n==0L) return;
st.add(n);
if (n==1L) return;
long f;
for(f=1L;;f=f<<1|1L)
if ((f>>1)<=n-1L-f&&(f<<1)>=n-1L-f)
break;
solve(f);
if ((f<<1|1)!=n)
solve(n-1-f);
}
static void init(){
p2=new long[maxn];
p2[0]=1L;
for(int i=1;i<maxn;i++){
p2[i]=p2[i-1]<<1;
p2[i-1]--;
}
}
public static void main(String[] args) throws IOException{
InputReader in=new InputReader(System.in);

init();
while(in.nextLine()!=null){
long n=in.nextLong();
st.clear();solve(n);
out.println(st.size());
}
out.flush();
out.close();
}

}

OS X 下个性化开发环境的搭建

本人的几轮开发环境配置都是在凌乱中完成的,是时候做一整理了。

  • 安装iTerm2
    没什么话好多说。这个终端应用棒棒的,尤其是卷帘般的可随时唤出的Hotkey Window。别忘了Make iTerm2 default Term

Screen Shot 2015-11-03 at 22.54.31

  • Homebrew
    Homebrew installs the stuff you need that Apple didn’t.

ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”

A package manager with a handy command brew install that works just like apt-get install in Linux.

Snip20151024_2
Snip20151024_4

Read more

OS X 清洁地升级安装

尝鲜可能太急切,还是得慢慢啃黑苹果

Screen Shot 2015-10-23 at 5.29.49 AMScreen Shot 2015-10-23 at 16.50.01Screen Shot 2015-10-24 at 1.01.36 PM

OS X 10 11 SIP对NVRAM的重大影响

  • SIP是OS X El Capitan中新增的一大特性。
  • NVRAM断电后不丢失其中保存到信息。

这两大因素给予了我长达半个月的软硬件故障的困扰,几乎走投无路。

具体症状是每次启动黑苹果都会出现的错误报告,偶尔还附带着屏幕上的条带状花屏:

Read more

BestCoder

Solved Problems
SDOI
Reorder the Books

SDOI

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
/**
* 2015年10月10日 下午6:54:59
* PrjName:Bc59-01
* @ Semprathlon
*/
import java.io.*;
import java.util.*;
public class Main {
static Person[] ps;
static ArrayList<Person> li=new ArrayList<Person>();
public static void main(String[] args) throws IOException{
InputReader in=new InputReader(System.in);
PrintWriter out=new PrintWriter(System.out);
int T=in.nextInt();
while(T-->0){
int n=in.nextInt();
int m=in.nextInt();
float x1=0,x2=0;
int female=0,h=0;
ps=new Person[n];
for(int i=0;i<n;i++){
ps[i]=new Person(in.next(), in.next(), in.nextInt(), in.nextInt());
female+=ps[i].sex;
if (ps[i].sex==1&&h==0) h=i;
x1=Math.max(x1, ps[i].s1);
x2=Math.max(x2, ps[i].s2);
}
li.clear();
for(int i=0;i<n;i++){
ps[i].s1*=300;ps[i].s1/=x1;
ps[i].s2*=300;ps[i].s2/=x2;
ps[i].s=ps[i].s1*(float)0.3+ps[i].s2*(float)0.7;
if (female>0){
if (ps[i].s>ps[h].s&&ps[i].sex==1) h=i;
}
else
if (ps[i].s>ps[h].s) h=i;
//li.add(ps[i]);
}
out.println("The member list of Shandong team is as follows:");
Person p0=new Person();
if (female>0){
// out.println(li.get(h).name);
p0=new Person(ps[h]);
ps[h].s=-1;
m--;
}
Arrays.sort(ps, new Person.comp());
li.clear();

for(int i=0;i<m;i++)
li.add(ps[i]);
if (female>0){
li.add(p0);m++;
}
ps=li.toArray(new Person[0]);
Arrays.sort(ps, new Person.comp());
for(int i=0;i<m;i++)
out.println(ps[i].name);

}
out.flush();
out.close();
}
}
class Person{
String name;
int sex;
float s1,s2,s;
Person(){}
Person(Person p){
name=new String(p.name);
sex=p.sex;
s1=p.s1;
s2=p.s2;
s=p.s;
}
Person(String nm,String sx,int _s1,int _s2){
name=new String(nm);
if (sx.charAt(0)=='m') sex=0;
else sex=1;
s1=_s1;s2=_s2;
}
void debug(PrintWriter out){
out.println(name+"\t"+sex+"\t"+s);
}
static class comp implements Comparator<Person> {
public int compare(Person p1,Person p2){
return -Float.compare(p1.s, p2.s);
}
}
}

Reorder the Books

思索再三,竟然连充分条件、必要条件都没找准,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/** Oct 13, 2015 8:55:41 PM
* PrjName:hdu5500
* @author Semprathlon
*/
import java.io.*;
import java.util.*;
public class Main {
static int[] a;
public static void main(String[] args) throws IOException{
InputReader in=new InputReader(System.in);
PrintWriter out=new PrintWriter(System.out);
int T=in.nextInt();
while(T-->0){
int n=in.nextInt();
a=new int[n+1];
for(int i=1;i<=n;i++)
a[in.nextInt()]=i;
int ans=0;
// if (a[n]!=n&&a[n]!=1) ans++;
int k=a[n];
for(int i=n;i>1;i--)
if (a[i-1]<k){
k=a[i-1];n--;
}
else
break;
// out.println(n);
for(int i=n-1;i>1;i--){
if (a[i]==1)
continue;
boolean need=false;
for(int j=1;j<i;j++)
if (a[j]>a[i]) need|=true;
for(int j=i+1;j<=n;j++)
if (a[j]<a[i]) need|=true;
if (need){
ans++;
for(int j=1;j<=n;j++)
if (a[j]<a[i])
a[j]++;
a[i]=1;
}
}
if (a[1]!=1) ans++;
out.println(ans);
}
out.flush();
out.close();
}
}

观察、归纳后可以优化到最简,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class Main {
static int[] a;
public static void main(String[] args) throws IOException{
InputReader in=new InputReader(System.in);
PrintWriter out=new PrintWriter(System.out);
int T=in.nextInt();
while(T-->0){
int n=in.nextInt();
a=new int[n+1];
for(int i=1;i<=n;i++)
a[in.nextInt()]=i;
int ans=0;
int k=a[n],h=0;
for(int i=n;i>1;i--){
if (a[i-1]>k){
ans++;
a[i-1]=h--;
}
k=a[i-1];
}
if (a[1]!=h+1) ans++;
out.println(ans);
}
out.flush();
out.close();
}

}

Clover 升级后检测不到Windows引导的解决办法

为了配合OS X
的更新,打算从Clover r2485升级到r2850;在EFI分区进行替换后发现新Clover引导界面找不到Windows操作系统。
经过三番五次的备份还原后终于发现,是EFI/Clover/drivers64UEFI目录下缺少必要的驱动文件所致。
将新旧版本的drivers64UEFI文件夹合并(若文件同名则以新易旧)即可排除错误。

OS X下的一些故障排除

  • When using App Store, it occurs that “ … failed to download. Use the Purchases page to try again.”

    Suggestions may help, but it is more applicable to restart the mac…

BestCoder

1001 Clarke and minecraft

玩过MC无压力

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/** Sep 19, 2015 7:12:36 PM
* PrjName:Bc56-01
* @author Semprathlon
*/
import java.io.*;
import java.util.*;
public class Main {

/**
* @param args
*/
final static int maxn=110;
static int cnt;
static int[] w;
static HashMap<Integer, Integer> mp=new HashMap<Integer,Integer>();
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
InputReader in=new InputReader(System.in);
PrintWriter out=new PrintWriter(System.out);
int T=in.nextInt();
//h=new int[maxn];
w=new int[maxn];
while(T-->0){
int n=in.nextInt();
cnt=0;
mp.clear();
Arrays.fill(w, 0);
for(int i=1;i<=n;i++){
int k=in.nextInt();
if (mp.containsKey(k))
w[mp.get(k)]+=in.nextInt();
else{
w[cnt]+=in.nextInt();
mp.put(k, cnt++);
}
}
int sum=0;
for(int i=0;i<cnt;i++)
sum+=(w[i]+63)/64;
out.println((sum+35)/36);
}
out.flush();
out.close();
}
}

1002 Clarke and problem

第一时间想到的是容斥,而后才逐渐醒悟过来是DP。。。
另外mod的遗漏又错了一发。。。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/** Sep 19, 2015 7:24:54 PM
* PrjName:Bc56-02
* @author Semprathlon
*/
import java.io.*;
import java.util.*;
public class Main {

/**
* @param args
*/
final static int maxn=1010;
final static int high=1000000000;
final static int mod=1000000007;
//static int[] s=new int[maxn];
static int[][] f=new int[2][maxn];
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
InputReader in=new InputReader(System.in);
PrintWriter out=new PrintWriter(System.out);
int T=in.nextInt();
while(T-->0){
int n=in.nextInt();
int p=in.nextInt();
//Arrays.fill(s, 0, p, 0);
Arrays.fill(f[0], 0, p, 0);
f[0][0]=1;
int cnt=0;
//for(int j=0;j<p;j++)out.print(f[j]+" ");out.println();
for(int i=1;i<=n;i++){
int k=in.nextInt();
while(k<0) k+=p;
k%=p;
Arrays.fill(f[cnt^1], 0,p,0);
for(int j=0;j<p;j++){
f[cnt^1][(k+j)%p]+=f[cnt][j];
f[cnt^1][(k+j)%p]%=mod;
}
for(int j=0;j<p;j++){
f[cnt^1][j]+=f[cnt][j];
f[cnt^1][j]%=mod;
}
cnt^=1;
}
out.println(f[cnt][0]);

}
out.flush();
out.close();
}
}

1003 Clarke and puzzle

没有总结好Nim游戏的规律啊。。。超简单的代码