NEERC Northern Subregional Contest 2016-2017

This is my blog.
中秋
没有月亮
吃中饭的时候
停电了
莫非是我想偷懒
晚去训练的原因吗
今天还是很冷很冷
(未完待续)


中秋节快乐!
今天的题解是俄文,真的是很累很累。偷偷跑出去吃了饭,回来倒没什么精力,差点在出租车上睡着了。
发现了某人居然是情头,看来又是一对喽!祝99!
今天更新一半吧!毕竟要睡觉觉的呢!
今天不截图了,可以搜一下就有题目的呢!毕竟思路最重要么。

A. Anniversary Cake

题解:

10.4.1
只要一组解即可,那就分类讨论一下就可以,不知道为什么wa!

AC代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
right?!!
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <map>
using namespace std;
int main()
{
int w, h, x1, y1, x2, y2;
scanf("%d %d %d %d %d %d",&w, &h, &x1, &y1, &x2, &y2);
if(x1 == x2 && y1 != y2)
{
printf("0 %d %d %d\n",y1, w, y2);
}
if(y1 == y2 && x1 != x2)
{
printf("%d 0 %d %d\n",x1, x2, h);
}
if(x1 != x2 && y1 != y2)
{
printf("%d 0 %d %d\n", x1, x2, h);
}
return 0;
}

wa代码(其中有一份是claris贴出来的呢!)

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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
//1.第一次自己的分类,很繁琐,但为什么错啊!
#include <iostream>
#include <cstdio>
using namespace std;
int w,h,ax,ay,bx,by;
int x1,y1,x2,y2;
int main(){
scanf("%d%d%d%d%d%d",&w,&h,&ax,&ay,&bx,&by);
if(ax==bx){
if(ax==0||ax==w){
x1=0;x2=w;
y1=y2=(ay+by)/2;
}
else{
x1=0;
y1=ay;
x2=w;
y2=by;
}
}
else if(ay==by){
if(ay==0||ay==w){
x1=x2=(ax+bx)/2;
y1=0;y2=h;
}
else{
y1=0;y2=h;
x1=ax;x2=bx;
}
}
else{
if(ay<by){
x1=ax;y1=ay+1;
x2=bx;y2=by-1;
}
else{
x1=ax;y1=ay-1;
x2=bx;y2=by+1;
}
}
printf("%d %d %d %d\n",x1,y1,x2,y2);
return 0;
}
//2.看了claris的思路,改的继续wa
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
struct ty{
int x,y;
}a[2];
bool cmp(ty a,ty b){
return a.y<b.y;
}
int main(){
int w,h;
scanf("%d%d%d%d%d%d",&w,&h,&a[0].x,&a[0].y,&a[1].x,&a[1].y);
sort(a,a+2,cmp);
if(a[0].x==a[1].x){
printf("%d %d %d %d\n",0,a[0].y,w,a[1].y);
}
else{
printf("%d %d %d %d\n",a[0].x,0,a[1].x,h);
}
return 0;
}
//3.claris的居然上去也是wa,可是看上去和AC的一样啊
#include<bits/stdc++.h>
using namespace std;
const int Maxn=200020;
typedef long long LL;
typedef pair<int,int>pi;
pi a[2];
int main(){
    int w,h;
    scanf("%d%d",&w,&h);
    int x,y;
    for(int i=0;i<2;i++){
        scanf("%d%d",&x,&y);
        a[i]=pi(x,y);
    }
    sort(a,a+2);
    //puts("ok");
    if(a[0].first==a[1].first){
        printf("%d %d %d %d\n",0,a[0].second,w,a[1].second);
    }
    else{
        printf("%d %d %d %d\n",a[0].first,0,a[1].first,h);
    }
    return 0;
}
//4.修改了一下,依旧wa
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <map>
using namespace std;
const int Maxn=200020;
typedef long long LL;
typedef pair<int,int>pi;
pi a[2];
int main()
{
int w,h;
scanf("%d%d",&w,&h);
int x,y;
for(int i=0;i<2;i++){
scanf("%d%d",&x,&y);
a[i]=pi(x,y);
}
sort(a,a+2);
if(a[0].first==a[1].first){
if(a[0].first==0||a[0].first==w){
int tmp=min(a[0].second,a[1].second);
printf("%d %d %d %d\n",0,tmp+1,w,tmp+1);
}
else
printf("%d %d %d %d\n",0,a[0].second,w,a[1].second);
}
else{
if(a[0].second>a[1].second)
printf("%d %d %d %d\n",a[0].first,0,a[1].first,h);
else if(a[0].second<a[1].second)
printf("%d %d %d %d\n",a[1].first,0,a[0].first,h);
else if(a[0].second==0||a[0].second==w){
int tmp=min(a[0].first,a[1].first);
printf("%d %d %d %d\n",tmp+1,0,tmp+1,h);
}
else{
printf("%d %d %d %d\n",a[0].first,0,a[1].first,h);
}
}
return 0;
}

先留在这里吧!研究研究究竟哪里wa了

B. Boys and Girls

题意

明明纠结了整场的题目,我看了一下,顺利把自己绕晕了。需要清晰的大脑以及数学逻辑吧!
题解翻译不好……有n个人围成一个圈,x个在男孩的边上,y个在女孩的边上,输出满足的排序。

题解

AC代码

C. CodeCoder vs TopForces

题意

题解

AC代码

D. Digital Addition

题意

题解

AC代码

E. Easy Reading

题意

题解

AC代码

F. Folding

题意

给你一张纸的尺寸,让你折出目标尺寸的纸。求最小的次数,如果不行,输出-1。

AC代码

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
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int INF=1e9+5;
int W,H,w,h;
int change(int x,int y){
if(x==y)return 0;
int t=0;
while(x>2*y){
x=(x+1)/2;
t++;
}
return t + 1 ;
}
void solve(){
int ans=INF;
if(W>=w&&H>=h)ans=min(ans,change(W, w)+change(H,h));
if(W>=h&&H>=w)ans=min(ans,change(W, h)+change(H,w));
if(ans==INF)printf("-1\n");
else printf("%d\n",ans);
}
int main(){
scanf("%d%d%d%d",&W,&H,&w,&h);
solve();
return 0 ;
}

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
//it not sure small to small,because divide 2.
#include <iostream>
#include <cstdio>
using namespace std;
int W,H,w,h;
int main(){
scanf("%d%d%d%d",&W,&H,&w,&h);
int ans=0;
if(W>H)swap(W,H);
if(w>h)swap(w,h);
if(W<w||H<h)printf("-1\n");
else{
if(W!=w){
while(W>2*w){
W=(W+1)/2;
ans++;
}
ans++;
}
if(H!=h){
while(H>2*h){
H=(H+1)/2;
ans++;
}
ans++;
}
printf("%d\n",ans);
}
return 0;
}

G. Gangsters in Central City

题意

题解

AC代码

H. Hard Cuts

题意

题解

AC代码

I. Integral Polygons

题意

题解

AC代码

J. Java2016

题意

题解

AC代码

K. King’s Heir

题意

国王要选候选人,国王偏爱小儿子,但是必须成年了才可登基。给出国王逝世的日期和儿子们的出生日期,输出几皇子称为了新国王。

题解

暴力

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
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
struct ty{
int day,month,year;
}son,king,tmp;
int main(){
scanf("%d%d%d",&king.day,&king.month,&king.year);
son.day=0;son.month=0;son.year=0;
int n;
scanf("%d",&n);
int ans=-1;
for(int i=1;i<=n;i++){
scanf("%d%d%d",&tmp.day,&tmp.month,&tmp.year);
int x=king.year-tmp.year;
if((x>18)||(x==18&&(tmp.month<king.month||((tmp.month==king.month)&&(tmp.day<king.day))))){
if((tmp.year>son.year)||(tmp.year==son.year&&(tmp.month>son.month||((tmp.month==son.month)&&(tmp.day>son.day))))){
ans=i;
son.year=tmp.year;son.month=tmp.month;son.day=tmp.day;
}
}
}
printf("%d\n",ans);
return 0;
}

AC代码

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
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=500000;
int death,n,i,now,ans,id;
int s[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int get(){
int d,m,y;
scanf("%d%d%d",&d,&m,&y);
int t=y*365+d+s[m-1];
return t;
}
int main(){
for(i=1;i<=12;i++)s[i]+=s[i-1];
death=get();
scanf("%d",&n);
ans=-1;
id=-1;
for(i=1;i<=n;i++){
now=get();
if(death-now>=365*18&&now>ans)ans=now,id=i;
}
printf("%d",id);
return 0;
}

小记

可以看出AC代码就不用那么复杂的逻辑判断了,而且还很方便,值得借鉴。

转载请注明出处,谢谢。

愿 我是你的小太阳


买糖果去喽