Python\C++| CCFCSP 第三题
试题编号: | 201312-3 |
试题名称: | 最大的矩形 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: |
问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1 ≤ i ≤ n)个矩形的高度是hi。这n个矩形构成了一个直方图。例如,下图中六个矩形的高度就分别是3, 1, 6, 5, 2, 3。 输入格式 第一行包含一个整数n,即矩形的数量(1 ≤ n ≤ 1000)。 输出格式 输出一行,包含一个整数,即给定直方图内的最大矩形的面积。 样例输入 6 样例输出 10 |
#include <iostream>
#include <cstring>
#include <algorithm>
#include <algorithm>
using namespace std;
int tt[1005];
bool cmp(int a,int b)
{
return a>b;
}
int main()
{
int n,l,t;
while(cin>>n)
{
int ans=0;
int maxn=0;
for(int i=0; i<n; i++)
{
cin>>tt[i];
maxn=max(maxn,tt[i]);
}
for(int i=1;i<n;i++)
{
if(tt[i]==0)
break;
else
{
int cnt=0;
for(int j=0;j<n;j++)
{
if(tt[j]-tt[i]<0)
cnt=0;
else
cnt++;
maxn=max(maxn,cnt*tt[i]);
}
}
}
cout<<maxn<<endl;
}
}
试题编号: | 201403-3 |
试题名称: | 命令行选项 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: |
问题描述 请你写一个命令行分析程序,用以分析给定的命令行里包含哪些选项。每个命令行由若干个字符串组成,它们之间恰好由一个空格分隔。这些字符串中的第一个为该命令行工具的名字,由小写字母组成,你的程序不用对它进行处理。在工具名字之后可能会包含若干选项,然后可能会包含一 些不是选项的参数。 输入格式 输入的第一行是一个格式字符串,它至少包含一个字符,且长度不超过 52。格式字符串只包含小写字母和冒号,保证每个小写字母至多出现一次,不会有两个相邻的冒号,也不会以冒号开头。 输出格式 输出有 N 行。其中第 i 行以"Case i:" 开始,然后应当有恰好一个空格,然后应当按照字母升序输出该命令行中用到的所有选项的名称,对于带参数的选项,在输出它的名称之后还要输出它的参数。如果一个选项在命令行中出现了多次,只输出一次。如果一个带参数的选项在命令行中出 现了多次,只输出最后一次出现时所带的参数。 样例输入 albw:x 样例输出 Case 1: -a -l |
Python 实现
import sys
a=sys.stdin.readline()
a=a.strip()
b=sys.stdin.readline()
b=b.strip()
cnt=int(b)
for case in range(0,cnt):
cmd = sys.stdin.readline()
cmd=cmd.strip()
cmd=cmd.replace('\n','')
cmd=cmd.split(" ")
ans = {}
l=len(cmd)
f=len(a)
i=1
while(i<=l-1):
if(cmd[i][0]=='-' and len(cmd[i])==2):
index=a.find(cmd[i][1])
if(index==-1):
break
if(index + 1 == f):
ans[cmd[i]] = '0'
elif(a[index+1]==':'):
if(i+1==l):
break
else:
ans[cmd[i]]=cmd[i+1]
i+=1
else:
ans[cmd[i]] = '0'
else:
break
i+=1
slove=sorted(ans.items(), key=lambda d: d[0])
s="Case "+str(case+1)+": "
for h in slove:
key,value=h
if(value=='0'):
s+=(key+" ")
else :
s+=(key+" "+value+" ")
s+='\n'
sys.stdout.write(s)
试题编号: | 201409-3 |
试题名称: | 字符串匹配 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: |
问题描述 给出一个字符串和多行文字,在这些文字中找到字符串出现的那些行。你的程序还需支持大小写敏感选项:当选项打开时,表示同一个字母的大写和小写看作不同的字符;当选项关闭时,表示同一个字母的大写和小写看作相同的字符。 输入格式 输入的第一行包含一个字符串S,由大小写英文字母组成。 输出格式 输出多行,每行包含一个字符串,按出现的顺序依次给出那些包含了字符串S的行。 样例输入 Hello 样例输出 HelloWorld 样例说明 在上面的样例中,第四个字符串虽然也是Hello,但是大小写不正确。如果将输入的第二行改为0,则第四个字符串应该输出。 评测用例规模与约定 1<=n<=100,每个字符串的长度不超过100。 |
import sys
a=sys.stdin.readline()
a=a.strip()
c=sys.stdin.readline()
c=c.strip()
b=sys.stdin.readline()
b=b.strip()
cnt=int(b)
test=[]
for case in range(0,cnt):
d=sys.stdin.readline()
d=d.strip()
test.append(d)
if(c=='0'):
a=a.lower()
for tt in test :
cc=tt
if (c == '0'):
cc=cc.lower()
if(a in cc):
sys.stdout.write(tt+'\n')
试题编号: | 201412-3 |
试题名称: | 集合竞价 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: |
问题描述 某股票交易所请你编写一个程序,根据开盘前客户提交的订单来确定某特定股票的开盘价和开盘成交量。 输入格式 输入数据有任意多行,每一行是一条记录。保证输入合法。股数为不超过108的正整数,出价为精确到恰好小数点后两位的正实数,且不超过10000.00。 输出格式 你需要输出一行,包含两个数,以一个空格分隔。第一个数是开盘价,第二个是此开盘价下的成交量。开盘价需要精确到小数点后恰好两位。 样例输入 buy 9.25 100 样例输出 9.00 450 评测用例规模与约定 对于100%的数据,输入的行数不超过5000。 |
不知道该怎么优化了 70分代码
import sys
tt={}
i=1
while True:
line=sys.stdin.readline().strip()
if not line:
break
if(line[0]=='c'):
x,y=line.split(" ")
tt[i]='0'
tt[int(y)]='0'
else:
value=line.split(" ")
tt[i]=(value[0],float(value[1]),int(value[2]))
i+=1
sum=0
all=0
ansp=0.0
i=0
for i in range(1,len(tt)+1):
buy=0
sell=0
if(tt[i]=='0'):
continue
for j in range(1,len(tt)+1):
if (tt[j] == '0'):
continue
if(tt[j][0][0]=='b'and tt[j][1]>=tt[i][1]):
buy+=tt[j][2]
if (tt[j][0][0] == 's' and tt[j][1] <= tt[i][1]):
sell += tt[j][2]
sum=min(sell,buy)
if sum>all:
all=sum
ansp=tt[i][1]
if sum == all:
ansp=max(ansp,tt[i][1])
ansp='%.2f'%ansp
sys.stdout.write(ansp+" "+str(all)+'\n')
试题编号: | 201503-3 |
试题名称: | 节日 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: |
问题描述 有一类节日的日期并不是固定的,而是以“a月的第b个星期c”的形式定下来的,比如说母亲节就定为每年的五月的第二个星期日。 输入格式 输入包含恰好一行,有五个整数a, b, c, y1, y2。其中c=1, 2, ……, 6, 7分别表示星期一、二、……、六、日。 输出格式 对于y1和y2之间的每一个年份,包括y1和y2,按照年份从小到大的顺序输出一行。 样例输入 5 2 7 2014 2015 样例输出 2014/05/11 评测用例规模与约定 所有评测用例都满足:1 ≤ a ≤ 12,1 ≤ b ≤ 5,1 ≤ c ≤ 7,1850 ≤ y1, y2 ≤ 2050。 |
import sys
day = [29, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
month = list(range(1, 13))
year = list(range(1850, 2051))
data = {}
week = 2
i = 0
for y in year:
if ((y % 4 == 0 and y % 100 != 0) or y % 400 == 0):
day[2] = day[0]
for m in month:
da = day[m]
for d in range(1, da + 1):
# print(str(y)+' '+str(m)+' '+str(d)+' '+str(week))
data[i] = tuple((y, m, d, week))
week += 1
week %= 7
i += 1
day[2] = 28
line = sys.stdin.readline().strip()
line = line.split(" ")
line = [int(v) for v in line]
line[2] %= 7
a = False
i = 0
nowy = line[3]
k = 0
while (k < len(data)):
if (data[k][1] == line[0] and data[k][0] >= line[3] and data[k][0] <= line[4] and data[k][3] == line[2]):
i += 1
if (i == line[1]):
a = True
sys.stdout.write(str(data[k][0]) + '/' + str('%0.2d' % data[k][1]) + '/' + str('%0.2d' % data[k][2]) + '\n')
if (data[k][1]==12 and data[k][2]==31 and data[k][0] >= line[3] and data[k][0] <= line[4]):
if(a==False):
sys.stdout.write('none' + '\n')
i = 0
a=False
k += 1
试题编号: | 201509-3 |
试题名称: | 模板生成系统 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: |
问题描述 成成最近在搭建一个网站,其中一些页面的部分内容来自数据库中不同的数据记录,但是页面的基本结构是相同的。例如,对于展示用户信息的页面,当用户为 Tom 时,网页的源代码是 输入格式 输入的第一行包含两个整数 m, n,分别表示模板的行数和模板生成时给出的变量个数。 输出格式 输出包含若干行,表示模板生成的结果。 样例输入 11 2 样例输出 <!DOCTYPE html> 评测用例规模与约定 0 ≤ m ≤ 100 |
import sys
import re
line = sys.stdin.readline().strip()
line = line.split(" ")
line = [int(v) for v in line]
i=0
kk={}
ht={}
for _ in range(0,line[0]):
html = sys.stdin.readline().strip()
g=re.findall(r"{{ (.+?) }}",html)
#print(g)
for x in g:
s='{{ '
s+=x
s+=' }}'
kk[s]=''
ht[i] = html
i += 1
for _ in range(0,line[1]):
pat = sys.stdin.readline().strip()
a,b=pat.split(" ",1)
b=b.strip('"')
s = '{{ '
s += a
s += ' }}'
if(s in kk):
kk[s]=b
ll=0
for ll in range(0,len(ht)):
for a,b in kk.items():
if(a in ht[ll]):
ht[ll]=ht[ll].replace(a,b)
print(ht[ll])
试题编号: | 201512-3 |
试题名称: | 画图 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: |
问题描述 用 ASCII 字符来画图是一件有趣的事情,并形成了一门被称为 ASCII Art 的艺术。例如,下图是用 ASCII 字符画出来的 CSPRO 字样。 输入格式 第1行有三个整数m, n和q。m和n分别表示画布的宽度和高度,以字符为单位。q表示画图操作的个数。 输出格式 输出有n行,每行m个字符,表示依次执行这q个操作后得到的画图结果。 样例输入 4 2 3 样例输出 AAAA 样例输入 16 13 9 样例输出 ................ 评测用例规模与约定 所有的评测用例满足:2 ≤ m, n ≤ 100,0 ≤ q ≤ 100,0 ≤ x < m(x表示输入数据中所有位置的x坐标),0 ≤ y < n(y表示输入数据中所有位置的y坐标)。 |
又是运行错误 90分代码
import sys
line = sys.stdin.readline().strip()
line = line.split()
line[0]=int(line[0])
line[1]=int(line[1])
line[2]=int(line[2])
#line = [int(v) for v in line]
ans = [(['.'] * line[0]) for _ in range(line[1])]
vis= [([0] * line[0]) for _ in range(line[1])]
che = ['-', '|', '+']
dir=[[1,0],[-1,0],[0,-1],[0,1]]
def check(xx,yy):
if(xx>=0 and yy>=0 and xx<line[1] and yy<line[0] ):
if(ans[xx][yy] not in che and vis[xx][yy]==0):
return True
else:
return False
else:
return False
def solve(xx,yy,pad):
if (check(xx,yy)):
vis[xx][yy] = 1
ans[xx][yy] = pad
for dire in dir:
ccx = xx + dire[0]
ccy = yy + dire[1]
if (check(ccx, ccy)):
solve(ccx, ccy, pad)
for _ in range(0, line[2]):
cmd = sys.stdin.readline().strip()
cmd = cmd.split()
if (cmd[0] == '0'):
cmd[1]=int(cmd[1])
cmd[2]=int(cmd[2])
cmd[3]=int(cmd[3])
cmd[4]=int(cmd[4])
if (cmd[1] == cmd[3]):
for c in range(min(cmd[2], cmd[4]), max(cmd[2], cmd[4]) + 1):
if (ans[c][cmd[1]] == '-' or ans[c][cmd[1]] == '+'):
ans[c][cmd[1]] = '+'
else:
ans[c][cmd[1]] = '|'
else:
for c in range(min(cmd[1], cmd[3]), max(cmd[1], cmd[3])+1):
# print(str(cmd[2]) + " " + str(c))
if (ans[cmd[2]][c] == '|' or ans[cmd[2]][c] == '+'):
ans[cmd[2]][c] = '+'
else:
ans[cmd[2]][c] = '-'
else:
sty = int(cmd[1])
stx = int(cmd[2])
if(check(stx,sty)):
vis = [([0] * line[0]) for _ in range(line[1])]
solve(stx,sty,cmd[3])
for pp in range(len(ans) - 1, -1, -1):
for q in ans[pp]:
sys.stdout.write(q)
sys.stdout.write('\n')
试题编号: | 201604-3 |
试题名称: | 路径解析 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: |
问题描述 在操作系统中,数据通常以文件的形式存储在文件系统中。文件系统一般采用层次化的组织形式,由目录(或者文件夹)和文件构成,形成一棵树的形状。文件有内容,用于存储数据。目录是容器,可包含文件或其他目录。同一个目录下的所有文件和目录的名字各不相同,不同目录下可以有名字相同的文件或目录。 输入格式 第一行包含一个整数 P,表示需要进行正规化操作的路径个数。 输出格式 共 P 行,每行一个字符串,表示经过正规化操作后的路径,顺序与输入对应。 样例输入 7 样例输出 /d2/d4/f1 评测用例规模与约定 1 ≤ P ≤ 10。 |
用的大佬的思路 是真没看懂题啊
import sys
line = sys.stdin.readline().strip()
n=int(line)
now=sys.stdin.readline().strip()
for _ in range(0, n):
dir = sys.stdin.readline().strip()
if(dir==""):
sys.stdout.write(now+'\n')
continue
if(dir[0]!='/'):
dir=now+'/'+dir
dir=dir.replace('/',' ')
dir=dir.split()
#print(dir)
ans=[]
for x in dir:
if (x=='.'):
continue
elif(x=='..'):
if(len(ans)!=0):
ans.pop()
else:
ans.append(x)
sys.stdout.write('/')
for i in range(0,len(ans)):
if(i!=0):
sys.stdout.write('/')
sys.stdout.write(ans[i])
sys.stdout.write('\n')
试题编号: | 201609-3 |
试题名称: | 炉石传说 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: |
问题描述 《炉石传说:魔兽英雄传》(Hearthstone: Heroes of Warcraft,简称炉石传说)是暴雪娱乐开发的一款集换式卡牌游戏(如下图所示)。游戏在一个战斗棋盘上进行,由两名玩家轮流进行操作,本题所使用的炉石传说游戏的简化规则如下: 输入格式 输入第一行是一个整数 n,表示操作的个数。接下来 n 行,每行描述一个操作,格式如下: 输出格式 输出共 5 行。 样例输入 8 样例输出 0 样例说明 按照样例输入从第 2 行开始逐行的解释如下: 评测用例规模与约定 * 操作的个数0 ≤ n ≤ 1000。 |
import sys
line = sys.stdin.readline().strip()
n = int(line)
p1 = [[0, 30]]
p2 = [[0, 30]]
now = 1
for _ in range(0, n):
x = sys.stdin.readline().strip()
if (x[0] == 's'):
x = x.split()
p = int(x[1])
a = int(x[2])
h = int(x[3])
if (now == 1):
p1.insert(p, [a, h])
else:
p2.insert(p, [a, h])
if (x[0] == 'a'):
x = x.split()
a = int(x[1])
d = int(x[2])
if (now == 1):
p2[d][1] -= p1[a][0]
p1[a][1] -= p2[d][0]
if (p1[a][1] <= 0 and a!=0):
p1.remove(p1[a])
if (p2[d][1] <= 0 and d!=0):
p2.remove(p2[d])
else:
p1[d][1] -= p2[a][0]
p2[a][1] -= p1[d][0]
if (p2[a][1] <= 0 and a!=0):
p2.remove(p2[a])
if (p1[d][1] <= 0 and d!=0):
p1.remove(p1[d])
if (x[0] == 'e'):
if (now == 1):
now = 2
else:
now = 1
#print(p1)
#print(p2)
if (p1[0][1] > 0 and p2[0][1] > 0):
sys.stdout.write('0' + '\n')
elif (p1[0][1] <= 0 and p2[0][1] > 0):
sys.stdout.write('-1' + '\n')
elif (p1[0][1] > 0 and p2[0][1] <= 0):
sys.stdout.write('1' + '\n')
sys.stdout.write(str(p1[0][1]) + '\n')
sys.stdout.write(str(str(len(p1)-1) + ' '))
for i in range(1, len(p1)):
sys.stdout.write(str(p1[i][1]) + ' ')
sys.stdout.write('\n')
sys.stdout.write(str(p2[0][1]) + '\n')
sys.stdout.write(str(str(len(p2)-1) + ' '))
for i in range(1, len(p2)):
sys.stdout.write(str(p2[i][1]) + ' ')
sys.stdout.write('\n')
试题编号: | 201612-3 |
试题名称: | 权限查询 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: |
问题描述 授权 (authorization) 是各类业务系统不可缺少的组成部分,系统用户通过授权机制获得系统中各个模块的操作权限。 输入格式 输入第一行是一个正整数 p,表示不同的权限类别的数量。紧接着的 p 行被称为 P 段,每行一个字符串,描述各个权限。对于分等级权限,格式为 <category>:<level>,其中 <category> 是权限类名,<level> 是该类权限的最高等级。对于不分等级权限,字符串只包含权限类名。 输出格式 输出共 q 行,每行为 false、true,或者一个数字。false 表示相应的用户不具有相应的权限,true 表示相应的用户具有相应的权限。对于分等级权限的不带等级查询,如果具有权限,则结果是一个数字,表示该用户具有该权限的(最高)等级。如果用户不存在,或者查询的权限没有定义,则应该返回 false。 样例输入 3 样例输出 false 样例说明 样例输入描述的场景中,各个用户实际的权限如下: 评测用例规模与约定 评测用例规模: |
import sys
line = sys.stdin.readline().strip()
n = int(line)
au=[]
for i in range(0,n):
tt=sys.stdin.readline().strip()
au.append(au)
line = sys.stdin.readline().strip()
n = int(line)
xx={}
for i in range(0,n):
tt=sys.stdin.readline().strip()
tt=tt.split(' ')
tt.remove(tt[1])
bas=[]
for ii in tt[1:]:
if(':' in ii):
ii=ii.split(':')
gg=int(ii[1])
if(ii[0] not in bas):
bas.append(ii[0])
for j in range(gg,-1,-1):
add=ii[0]+':'+str(j)
if(add not in bas):
bas.append(add)
else:
bas.append(ii)
xx[tt[0]]=bas
#print(str(xx))
line = sys.stdin.readline().strip()
n = int(line)
user={}
for i in range(0,n):
tt=sys.stdin.readline().strip()
tt=tt.split(' ')
tt.remove(tt[1])
basic=[]
for lit in tt[1:]:
basic.append(xx[lit])
user[tt[0]]=basic
#print(str(user))
line = sys.stdin.readline().strip()
n = int(line)
for i in range(0,n):
cc = sys.stdin.readline().strip()
cc=cc.split(' ')
if(cc[0] in user):
o=0
flag=False
zz=0
if(':' in cc[0]):
for auth in user[cc[0]]:
if(cc[1] in auth):
o+=1
if(o>=1):
break
else :
kk = cc[1] + ':' + str(zz)
for auth in user[cc[0]]:
if (kk in auth):
flag = True
while (kk in auth):
kk = cc[1] + ':' + str(zz)
zz += 1
else:
if (cc[1] in auth):
o += 1
if(flag):
sys.stdout.write(str(zz-2)+'\n')
elif(o>=1):
sys.stdout.write('true'+'\n')
else:
sys.stdout.write('false'+'\n')
else:
sys.stdout.write('false'+'\n')
'''
6
crm:2
crm:7
hhhh
jj
ll
git:5
3
rr 3 crm:5 hhhh jj
cc 5 hhhh git:0 ll jj crm:0
qq crm:4 ll
4
a 1 rr
b 2 cc qq
c 3 qq rr
d 1 cc
'''
上一篇: 用PHP实现验证码功能_php基础
下一篇: 制作“搜索页面”part1