Codeforces通关之旅(五)

Codeforces通关之旅(五)

首页动作格斗Code斩更新时间:2024-05-09

代码具体查看github:https://github.com/hoperong/codeforce_problem

所涉及的题目:

61A、59A、144A、344A、405A、472A、25A、734A、268A、443A

codeforces

61A:

题目:

异或

思路:

相同为0,不同为1

代码:

#!/usr/bin/env python

# coding=utf-8

input_s = input()

input_l = input()

m = ''

for i in range(len(input_s)):

if input_s[i] == input_l[i]:

m = '0'

else:

m = '1'

print(m)

59A:

题目:

比较单词中大小写的数量,大写多,则输出全大写,反之输出全小写

思路:

老样子,依题意撸代码,洒洒水啦。

代码:

#!/usr/bin/env python

# coding=utf-8

input_s = input()

upper = 0

lower = 0

for i in range(len(input_s)):

if ord(input_s[i]) >= ord('A') and ord(input_s[i]) <= ord('Z'):

upper = 1

else:

lower = 1

if upper > lower:

print(input_s.upper())

else:

print(input_s.lower())

144A:

题目:

士兵排队,需要最高的在第一,最矮的在最后,中间无所谓。每次只能相邻的交换位置,需要多少次?

思路:

找到最高的和最矮的目前的位置,计算他们自己离自己的位置差几步能走到,合起来就是结果了。如果最高的在最矮的右边的话,结果需要减一。因为交换的过程中最高和最矮会经历一次他们两个的交换,这时候一次交换走了两步,结果是计算交换次数而不是走的步数,所以需要减一。

注:代码中,找最大的用大于,是为了找到更靠近左边的最大,这样子在出现相同值的时候,可以少走。最小同理,找最右的。

代码:

#!/usr/bin/env python

# coding=utf-8

input_s = input()

input_l = input().split(' ')

max_mount = -1

max_index = -1

min_mount = 999

min_index = -1

for i in range(len(input_l)):

if int(input_l[i]) > max_mount:

max_mount = int(input_l[i])

max_index = i

if int(input_l[i]) <= min_mount:

min_mount = int(input_l[i])

min_index = i

if max_index <= min_index:

print(max_index len(input_l) - 1 - min_index)

else:

print(max_index len(input_l) - 1 - min_index - 1)

344A:

题目:

n块磁铁并排摆放。异性相吸形成一块、同性相斥还是两块。问最后会有形成多少块。

思路:

如果上一次输入和下一次输入一样,则会合在一起形成一块。多少次不同,就有 1次块。

代码:

#!/usr/bin/env python

# coding=utf-8

input_s = int(input())

before = ''

mount = 0

for i in range(input_s):

input_l = input()

if before != input_l:

before = input_l

mount = 1

print(mount)

405A:

题目:

堆积木,对完以后全部向右推,形成新的一种结构,然后求出新的结构。

思路:

本质就是排序,小的在左,大的在右。

代码:

#!/usr/bin/env python

# coding=utf-8

input_s = int(input())

input_l = input().split(' ')

list_l = []

for i in input_l:

list_l.append(int(i))

for i in range(len(list_l) - 1):

for j in range(i 1, len(list_l)):

if list_l[i] > list_l[j]:

list_l[i], list_l[j] = list_l[j], list_l[i]

s = ''

for i in range(len(list_l)):

s = '{} '.format(list_l[i])

print(s.strip())

472A:

题目:

题主给出了一个一定正确的理论,任何不小于12的数,都可以拆成两个合数相加。

思路:

平分,然后开始向下寻找一对相加等于它的合数,可以减少判断质数的计算量,毕竟数字越大,是质数的概率越小。如果直接从1开始去找合数对,这样子会平白多计算好几次。

还有一种解题方式,就是预先计算好5w以内的质数保存在数组里面。这样子不需要计算质数了,直接判断,更减少计算量,不过加剧了内存使用,是一种空间换时间的方式,有些题目就很需要这样子做。

代码:

#!/usr/bin/env python

# coding=utf-8

def is_primes(number):

is_prime = True

for i in range(2, number):

if number % i == 0:

is_prime = False

break

return is_prime

input_s = int(input())

for i in range(input_s // 2, 3, -1):

if not is_primes(i) and not is_primes(input_s - i):

print('{} {}'.format(i, input_s - i))

break

25A:

题目:

寻找一个等差数列中的出错值的位置。嗯,这个是我之前理解的题意,然后错了n次以后,我才发现,英语不好,就应该老实的google(不仅仅是去翻译),wiki百科告诉我,evenness of numbers, for which see parity (mathematics)。套在题目里,简单说就是,序列的全奇全偶。所以题目就变成了,找到那个异类。

思路:

正确理解题意以后,就非常简单了。奇数偶数,谁只有一个谁就是异类。

代码:

#!/usr/bin/env python

# coding=utf-8

input_s = input()

input_l = input().split(' ')

even_index = 0

even_mount = 0

odd_index = 0

odd_mount = 0

for i in range(len(input_l)):

if int(input_l[i]) % 2 == 0:

odd_mount = 1

odd_index = i 1

else:

even_mount = 1

even_index = i 1

if even_mount == 1:

print(even_index)

else:

print(odd_index)

734A:

题目:

A和D比赛下棋,胜利场次多的获胜,存在平局。问最终胜负情况

思路:

老样子,依题意撸代码,洒洒水啦。

代码:

#!/usr/bin/env python

# coding=utf-8

input_s = input()

input_l = input()

a = 0

d = 0

for i in range(len(input_l)):

if input_l[i] == 'A':

a = 1

else:

d = 1

if a > d:

print('Anton')

elif a < d:

print('Danik')

else:

print('Friendship')

268A:

题目:

每个球队都有主、客场两套球服,当主场队伍球服和客场队伍球服颜色相同的时候,主场球队会穿上客场球服。题目需要我们在知道主客场球服颜色的情况下,计算下两两对战主客场,有多少次主场球队需要换衣服。

思路:

由于两两主客场对战,所以所有主客场的组合都会相遇。也就是说,只需要去组合主场服装=客场服装的排列组合就可以了。服装种类最多100中,直接用两个数组保存主客场对应的数量,组合相同颜色的主客场的可能性,即a*b,累加所有也就是答案了。

代码:

#!/usr/bin/env python

# coding=utf-8

input_s = int(input())

list_l1 = [0] * 100

list_l2 = [0] * 100

for i in range(input_s):

input_l = input().split(' ')

list_l1[int(input_l[0]) - 1] = 1

list_l2[int(input_l[1]) - 1] = 1

mount = 0

for i in range(100):

mount = list_l1[i] * list_l2[i]

print(mount)

443A:

题目:

计算集合里面有多少个不重复的字母

思路:

python的set去重

代码:

#!/usr/bin/env python

# coding=utf-8

input_s = input()[1:][:-1]

list_s = list([x.strip() for x in input_s.split(',') if len(x.strip()) > 0])

print(len(list(set(list_s))))

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved