下午刷了俩题,贴上来。。。

于 2011年09月6日 发布在 算法&&ACM 跳到评论

ZOJ 2420  Calendar

问某个日期后N天是几月几号星期几,我脑子里已经模拟的思路了。。但是懒得写,就用想python里面是否有现成的函数,没想到还真找到了。

代码十分简单,易读,唉,好方便,要是比赛中能用多好。。

#!/usr/bin/python
import time,datetime
import sys
week = ["Sunday", "Monday", "Tuesday", "Wednesday",\
    "Thursday", "Friday","Saturday","Sunday",]
for line in sys.stdin:
    line.split()
    line = int(line)
    if line == -1:
        break
    t = datetime.date(2000,1,1)+datetime.timedelta(line)
    print t,week[ (6+line)%7 ]


ZOJ 1001 A + B Problem

这两天看了看perl,就把A+B搞掉了,还是看了看了好多后才看的。。
用来读入标准输入一行,当读到文件结尾的时候会返回undef值。
split的功能和python是一样的,用分割符分开,这里的是/\s+/,用正则表达式表示一个或N个连续空白字符。
输出时候是标量内插,我一般喜欢把花括号加上。。

#!/usr/bin/perl -w
while( defined( $line = <STDIN> ) ){
    @num = split /\s+/,$line;
    $sum = $num[0] + $num[1];
    print "${sum}\n";
}


ZOJ 2508 A Less Simple Task in Windows

这个题是个简单的模拟题,窗口点击,点击到窗口就弄到第一个,分为单击和双击,标题蓝和内容栏,用class搞感觉十分方便。~

#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
#include<cstdio>
#include<cstring>
using namespace std;
int N,H,M,wmax,hmax;
class win{
public:
	int x1,x2;
	int y1,y2;
	int index;
	bool ismax;
	void getdata( int t ){
		scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
		ismax = false;index = t;
	}
	// 0 for not on, 1 for textarea, 2 for title area
	int  clickon( int x,int y ){
		if( ismax ){
			if( y >= hmax - H ) return 2;
			return 1;
		}
		else{
			if( x >= x1 && x <= x2 &&
				y >= y2 && y <= y1 )
				return y >= y1 - H ? 2 : 1;
			else return 0;
		}
	}
};
class click{
public:
	int x,y;
	void get( void ){
		scanf("%d%d",&x,&y);
	}
};
bool operator == ( click a,click b ){
	return a.x == b.x && a.y == b.y;
}
vector<win> V;

int main(void){
	int i,j,k;
	click C[ 100 ];
	while( scanf("%d%d%d%d",&N,&H,&wmax,&hmax) != EOF ){
		V.clear();
		for( i = 0; i < N; i++ ){
			win temp;temp.getdata(i);
			V.insert( V.begin(), temp );
		}
		scanf("%d",&M);
		for( i = 0; i < M; i++ )
			C[i].get();
		for( i = 0; i < M; i++ ){
			int cnt = -1;
			bool db = false;
			if( i < M - 1 && C[i] == C[i+1] )
				db = true;
			for( j = 0; j < N; j++ ){
				int status = V[j].clickon( C[i].x, C[i].y );
				if( status ) cnt = V[j].index;
				if( status == 2 ){
					while( j<N&&j>0 ) swap( V[j], V[j-1] ),j--;
					if( db ) V[0].ismax = !V[0].ismax;
				}
				if( status == 1 ){
					while( j<N&&j>0 ) swap( V[j], V[j-1] ),j--;
				}
				if( status ) break;
			}
			printf(i?" %d":"%d",cnt );
			if( db ) { printf(++i?" %d":"%d",cnt);}
		}
		puts("");
	}
	return 0;
}

本文共有 一条评论 | 沙发:文章评论

  1. admin说道:

    牛人啊、 :wink:

留下评论!

:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)