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

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 个意见

发表评论

电子邮件地址不会被公开。