Goodbye 2016

2016最后一个小时。

先把昨晚的Codeforces Goodbye 2016题解xjb写一下吧。

第一题是水题。只要能看到题目应该能很快写掉。

第二题有点意思。不过依旧是水题。可能有点坑点。在北极只有一个方向就是南,在南极只有一个方向就是北。不存在在南极或北极能向东向西这样的情况。如果从当前点向南向北走超过使得超过南极或北极,也是不合法的,因为在北极会有向北的方向,在南极有向南的方向。然后就可以忽略掉向东向西的情况。

第三题也还行。就是简单的扫描一遍确定最初的rating区间就行。然后一开始预设的区间应该是[ -inf, inf ]

第四题看起来挺吓人的。但是搜索一发就行了。因为只有最多30个分裂,然后每次分裂的长度都不超过5,所以其实可以预设一个400 * 400的棋盘,然后假设最初的位置为(200, 200),当然设置成别的合理的也可以,然后把每次分裂出去 的经过的位置染色。这样就只要O(n)的搜索就可以判定棋盘上的每个点是否被染色就可以得到解了。为了避免重复计算所以可以设置一个标志数组。

贴下代码:

//A
#include <bits/stdc++.h>
using namespace std;

#define make_pair mp
#define push_back pb
#define lson ( rt << 1 )
#define rson ( rt << 1 | 1 )
#define fun( x ) ( (x) >= 0 ? (x) : -(x) )
#define min( a, b ) ( (a) <= (b) ? (a) : (b) )
#define max( a, b ) ( (a) >= (b) ? (a) : (b) )

typedef long long LL;
typedef pair< int, int > pi;

int main() {
    int n, k, time = 0;
    cin >> n >> k;
    for ( int i = 1; i <= n; ++i ) {
        time += 5 * i;
        if ( time + k > 240 ) return !printf("%d\n", i - 1);
        else if( time + k == 240 ) return !printf("%d\n", i);
    }
    printf( "%d\n", n );
    return 0;
}
//B
#include <bits/stdc++.h>
using namespace std;

#define make_pair mp
#define push_back pb
#define lson ( rt << 1 )
#define rson ( rt << 1 | 1 )
#define fun( x ) ( (x) >= 0 ? (x) : -(x) )
#define min( a, b ) ( (a) <= (b) ? (a) : (b) )
#define max( a, b ) ( (a) >= (b) ? (a) : (b) )

typedef long long LL;
typedef pair< int, int > pi;

int main() {
    ios::sync_with_stdio( false );
    int n, t, y = 0;
    string dir; bool flag = true;
    cin >> n;
    for ( int i = 0; i < n; ++i ) {
        cin >> t >> dir;

        if( !flag ) continue;

        if( dir != "South" && y == 0 ) flag = false;
        if( dir != "North" && y == 20000 ) flag = false;

        if ( y == 0 ) y += t;
        else if( y == 20000 ) y -= t;
        else if ( dir == "South" ) y += t;
        else if( dir == "North" ) y -= t;

        if ( y < 0 || y > 20000 ) flag = false;
    }

    if( !flag ) cout << "NO" << endl;
    else if ( y == 0 ) cout << "YES" << endl;
    else cout << "NO" << endl;
    return 0;
}
//C
#include <bits/stdc++.h>
using namespace std;

#define make_pair mp
#define push_back pb
#define lson ( rt << 1 )
#define rson ( rt << 1 | 1 )
#define fun( x ) ( (x) >= 0 ? (x) : -(x) )
#define min( a, b ) ( (a) <= (b) ? (a) : (b) )
#define max( a, b ) ( (a) >= (b) ? (a) : (b) )

typedef long long LL;
typedef pair< int, int > pi;

const int inf = 0x3f3f3f3f;
int main() {
    ios::sync_with_stdio( false );
    int n, c, d;
    cin >> n;
    int dx = 0, mi = -inf, mx = inf;
    for ( int i = 0; i < n; ++i ) {
        cin >> c >> d;
        if ( d == 1 ) {
            if ( i == 0 ) mi = 1900;
            else mi = max( mi, 1900 - dx);
        } else {
            if ( i == 0 ) mx = 1899;
            else mx = min( mx, 1899 - dx);
        }
        dx += c;
    }
    if ( mx >= inf ) cout << "Infinity" << endl;
    else if( mi > mx ) cout << "Impossible" << endl;
    else cout << mx + dx << endl;
    return 0;
}
//D
#include <bits/stdc++.h>
using namespace std;

#define mp make_pair
#define pb push_back
#define lson ( rt << 1 )
#define rson ( rt << 1 | 1 )
#define fun( a ) ( (a) >= 0 ? (a) : 0 )
#define Max( a, b ) ( (a) >= (b) ? (a) : (b) )
#define Min( a, b ) ( (a) <= (b) ? (a) : (b) )

typedef long long LL;
typedef pair< int, int > pi;

const int maxn = 35;
const int maxm = 400;
const int inf = 0x3f3f3f3f;
const int fx[8] = { 0, 1, 1, 1, 0, -1, -1, -1};
const int fy[8] = { 1, 1, 0, -1, -1, -1, 0, 1};

int n, t[maxn];
bool vis[maxm][maxm], used[maxm][maxm][maxn][8];

void dfs( int x, int y, int pos, int dir ) {
	if ( used[x][y][pos][dir] ) return;
	used[x][y][pos][dir] = true;
	
	for ( int i = 0; i < t[pos]; ++i ) {
		x += fx[ dir ];
		y += fy[ dir ];
		vis[x][y] = true;
	}
	
	if ( pos != n - 1 ) {
		dfs( x, y, pos + 1, ( dir + 1 ) % 8 );
		dfs( x, y, pos + 1, ( dir + 7 ) % 8 );
	}
}
int main() {
	ios::sync_with_stdio( false );
	cin >> n;
	for ( int i = 0; i < n; ++i )
		cin >> t[i];
	memset( vis, 0, sizeof(vis) );
	memset( used, 0, sizeof( used ) );
	
	dfs( 200, 200, 0, 0 );
	
	int ans = 0;
	for( int i = 0; i < maxm; ++i ) {
		for ( int j = 0; j < maxm; ++j )
			if( vis[i][j] ) ++ans;
	}
	cout << ans << endl;
	return 0;
}


后面四题没写,明年再写吧。


今年快要过去了,顺便总结下2016年吧。

主要干了几件事:

1.上半年作为辩队的彩笔队长带小朋友打辩论,被吊打。

2.上半年参加安徽省赛,第9名,一等奖,被合肥50中小朋友,合工大15级虐了一波

3.上半年参加蓝桥杯,安徽省赛一等奖(因为没多少人报名吧....),然后国赛被吊打。

4.上半年参加2016年中国大学生程序设计大赛中南地区邀请赛,124名,被各个高校吊打。

5.暑期集训

6.CCPC网络赛被打爆,靠举办CCPC合肥赛获得名额

7.CCPC长春,70名,铜牌。

8.CCPC合肥参加筹备,认识了一些dalao

9.跟教练和辅导员闹翻滚出acm

10.ICPC沈阳,60+名,铜牌

11.彻底结束一切acm活动,专心学习。


怎么说我的这个2016年呢。感觉就是刺激。有时候感觉上一秒还是2016年初的寒假,下一秒却已经要结束2016年了。然而人生的前20年混的顺风顺水,到了20岁的时候开始面临各种各样的问题。

比如今年icpc本来打完沈阳,因为某机哥调了三个小时的ac自动机没搞定而跟银牌错过的之后,跟队友说在青岛要一波努力冲进China-Final,没想到我并没有能够去青岛,更不要说是China-Final了。


当然这些学习啊未来什么的没什么可说的,总之就是还是要朝着目标去努力。虽然感觉未来还是要去搬砖。不过还是想明年能够去北京飘一会。在合肥待了20年了。总该要出去走走闯闯。

不过今天早上考完数值分析回来之后没多久留鼻血居然是以喷的形式的时候,我开始考虑另外的问题了。

一个人的身体,总归还是非常重要的。以前高一听廖老师说她的一个学生大学毕业之后没多久就去世了(大概是这样 时间似乎有些久远了记忆也开始模糊了),突然就开始担心自己会不会也会像廖老师说的这个人一样。这其实并不是无根据的xjb担忧,而是确实要面对的。体重超过200斤了,今年的体测看评分来说似乎也没有几项是及格的,加上较密集的熬夜。身体确实似乎面对一个很严重的问题了。


2016年的高负荷运作似乎是身体日益不行的根源吧。从16年寒假结束开始一直长期的学习工作持续到了今年的11月,基本上一年十二月有10个月在连续的学习工作。以前本就脆弱的身体,更加脆弱。


所以展望下2017吧。就是大概是

以身体健康为主,健身!

以学习为辅,准备开启北漂!


然后就是新年快乐了。



这文章写的真破....

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值