最后的模拟赛尽管打的很糟糕。
某国个人所得税法规定,普通公民的主要应纳税收入项目及纳税金额如下:
工资、薪金所得。按月计算征税,以每月收入额减除费用800元后的余额作为该月应纳税所得额,税率如下表所示:
级数 |
月应纳税所得额 |
税率(%) |
1 |
不超过500元的 |
5 |
2 |
超过500元~2000元的部分 |
10 |
3 |
超过2000元~5000元的部分 |
15 |
4 |
超过5000元~20000元的部分 |
20 |
5 |
超过20000元~40000元的部分 |
25 |
6 |
超过40000元~60000元的部分 |
30 |
7 |
超过60000元~80000元的部分 |
35 |
8 |
超过80000元~100000元的部分 |
40 |
9 |
超过100000元的部分 |
45 |
一次性劳动报酬所得。按次计算征税,每次不超过4000元的,减除费用800元;4000元以上的,减除20%的费用,余额为应纳税所得额。征税税率如下表所示:
级数 |
每次应纳税所得额 |
税率(%) |
1 |
不超过20000元的部分 |
20 |
2 |
超过20000元~50000元的部分 |
30 |
3 |
超过50000元的部分 |
40 |
由上面可以看出,个人工资、薪金及一次性劳动报酬所得都是按照超额累进税率来征税的。超额累进税率将应纳税所得额按数额大小分成若干等级,每一等级规定一个税率,税率依次提高,但每一纳税人的的应纳税所得额依照所属等级同时适用几个税率分别计算,将计算结果相加后的总额作为应纳税款。
例如,某人某月工资总额为3800元,减去800元后,应纳税所得额为3000元。其中1级500元,2级1500元,3级1000元,税率分别为5%、10%、15%,应纳税总额为500*5%+1500*10%+1000*15%=325(元)。计算过程如图一所示。
现在需要你编一程序,根据该国某公司的所有职员一年内的各项收入信息(收入项目、收入时间、收入金额)计算该公司所有职员这一年应交纳的个人所得税总额。
输入
输入文件的第一行为一个正整数M(M<= 500),表示该公司的职员总数(职员编号依次为1,2,…,M)。接下来的各行每行表示一年内某一个职员的一项收入信息。具体格式如下:
工资、薪金收入信息:PAY 职员编号 收入时间 收入金额
一次性劳务报酬收入信息:INCOME 职员编号 收入时间 收入金额
其中,收入时间格式为:MM/DD,MM表示月份(1£ MM£ 12),DD表示日期(1£ DD£ 31);收入金额是一个正整数(单位:元),并假设每人每项收入金额小于100万元。
输入文件以字符“#”表示结束。输入文件中同一行相邻两项之间用一个或多个空格隔开。
输出
输出文件只有一个正数P,P表示该公司所有职员一年内应交纳的个人所得税总额(单位:元)。
样例输入
2
PAY 1 2/23 3800
INCOME 2 4/8 4010
INCOME 2 4/18 800
PAY 1 8/14 6700
PAY 1 8/10 1200
PAY 2 12/10 20000
#
样例输出
5476.6
数据说明:
对于100%的数据有 n<=500
传说中noi1998的题目,暴力模拟即可。然而我只过了样例。
在哪里建啤酒厂? (bro.c/.cpp/.pas)
一个小岛上的居民非常喜欢一种啤酒,迄今为止这种啤酒只能从波兰进口。但是今年,这个岛上的一个城市要建一座酒厂。所有的城市都位于海岸线上,仅有一条沿着海岸线绕岛一周的公路连接所有的城市。投资商收集了所有城市对这种酒的需求量,即每个城市每天需要多少桶酒。他同时知道两个城市之间的距离。运输上的花费是每桶每英里一元。一天的啤酒运输费用是从酿酒厂将啤酒运送到各个城市所需的费用总和。每天的花费取决于酒厂的位置,投资商希望找到建厂的位置以使每天的运输花费最小。
任务:
输入:
输入文件的一行包含一个整数,表示城市的个数,5<=n<=10000(我们假设城市沿着公路编号,相邻的城市有相邻的编号,城市1和n也是相邻的)。以下的n行,每行有两个整数zi,di,表示第i个城市对啤酒的日需求量和该城市到下一个城市的距离。整条公路的长度不超过1000000英里,每个城市的日需求量不超过1000桶。
输出:
输出文件包含一个整数,表示最少可能的每日运输费用。
样例输入:
6
1 2
2 3
1 2
5 2
1 10
2 3
样例输出:
41
数据说明:
对于50%的数据,有 n<=100
对于100%的数据有 n<=10000
这题完全就是被评测机坑了,可以o(n)但没必要(但是假如是noip那个老爷机估计也要挂),自己犯的失误主要是最大值开的不够大。
不老的传说 (spring.pas/.c/.cpp)
Dynamic为了寻找不老的泉水,经神仙指点来到了一圈奇异的巨石前,在巨石阵的中央清晰的传来泉水的声音。巨大的石头挡住了他的去路,突然间,原本无色的石头闪烁出靓丽的光芒,过了一会,石头上的颜色消失了。智慧女神出现了,她给了Dynamic一把神奇的刷子,这把刷子可以把连续的不超过K块石头刷成一种新颜色,新刷的颜色会覆盖原来的颜色。用最少的次数,恢复石阵的光彩,就会找到不老的泉水。Dynamic记得每一块石头的颜色,但他意识到这不是一个简单的问题,你能帮帮他么?
输入格式:
第一行包含3个整数N,C,K。N是石头的个数,C是颜色的种类,K是每次最多刷过的石头的个数。1<=N<=200, 1<=C,K<=N。第二行包含N个整数,分别是N块石头最终的颜色,按顺时针的顺序。颜色是1到C之间的一个整数,整数间用一个空格隔开。开始的时候,所有的石头都是无色的。
输出格式:
一个整数,为需要的最少次数。
输入输出样例:
spring.in |
spring.out |
5 2 3 1 2 1 2 1 |
3 |
样例说明:
设5块石头的编号分别是1,2,3,4,5。可以先把5,1,2刷成颜色1;再把2,3,4刷成颜色2;最后把3刷成颜色1。
数据说明:
对于30%的数据,有 n<=5
对于100%的数据有 n<=200
区间dp,类似石子合并但我做不来强打暴力20分。
安全网络问题 (safenet.pas/.c/.cpp)
在一个网络中,我们称服务器S为关键服务器,如果至少有另两部不同的服务器A和B,而A和B之间的所有联络都通过S。即若S崩溃,则A与B之间不能进行通讯。如果一个网络不包含关键服务器,则称它是安全的。服务期间所有的联络都是双向的,且一个服务器不允许直接与它自身相连。网络中可以存在单机和子网。找出给定网络的分割,使其拥有最少的安全子网。
输入文件(safenet.in)
第一行一个正整数n(n<=100),表示网络中服务器的台数。
以下n行,每行表示一个服务器的连接状态。在每行中,第一个数k表示是第k号服务器,0<=k<=n-1;第2个数是用括号括起来的(该数与括号之间没有空格),表示与该服务器之间相连的服务器的数量;剩下的是与该服务器直接相连的服务器的编号。
输出文件(safenet.out)
第一行表示安全子网的最少个数。以下每行代表一个子网,每个子网内的服务器按号数升序排列,号数之间用一个空格隔开。按每个子网内最小的服务器的号数,由小至大排列子网。
输入输出样例:
Safenet.in
8
0 (1) 1
1 (3) 2 0 3
2 (2) 1 3
3 (3) 1 2 4
4 (1) 3
7 (1) 6
6 (1) 7
5 (0)
Safenet.out
5
0 1
1 2 3
3 4
5
6 7
数据说明:
对于50%的数据,有 n<=10
对于100%的数据有 n<=100
由于神秘的全角半角问题而全体爆零的一道题,尽管据说这个题求个割点就能做出来,但是我还是觉得并查集求环然后再操作一波。