Codeforces Round 927 (Div. 3)

A. Thorns and Coins

考点:模拟

思路:

当遇到两个**的时候就结束循环,其余时候当字符是"@"的时候就+1。

复杂度:O(1)

python 复制代码
import heapq
import sys
input = sys.stdin.readline
t=int(input())
for _ in range(t):
    n=int(input())
    a=input().strip()
    cnt=0
    i=0
    for i in range(n):
        if i+1<n and a[i]=='*' and a[i+1]=='*':
            break
        if a[i]=='@':
            cnt+=1
    print(cnt)

B. Chaya Calendar

考点:模拟

思路:

找当前数,第一个大于他的倍数是多少即可。

复杂度:O(n)

python 复制代码
import heapq
import sys
input = sys.stdin.readline
t=int(input())
for _ in range(t):
    n=int(input())
    a=list(map(int,input().split()))
    cur=0
    for x in a:
        cur=(cur//x+1)*x
    print(cur)

C. LR-remainders

考点:后缀积

思路:

这题肯定是不能真的按题意模拟的,真的去删会超时。

我们将题目转换一下,先用双指针把要删除的顺序用b存一下,然后因为:

第1总的时候是:

第2总的时候是:

第i+1总的时候是:

可以发现这是一个典型的后缀和加双指针问题。

复杂度:O(n)

python 复制代码
import sys
input=sys.stdin.readline
from collections import deque
t=int(input())
for _ in range(t):
    n,m=map(int,input().split())
    a=list(map(int,input().split()))
    s=input().strip()
    b=[]
    z=1
    r=n-1
    l=0
    for v in s:
        if v=='R':
            b.append(a[r])
            r-=1
        if v=='L':
            b.append(a[l])
            l+=1
    z=1
    c=[]
    for i in range(n-1,-1,-1):
        z=(z*b[i])%m
        c.append(z)
    print(*(c[::-1]))

D. Card Game

考点:模拟,贪心

思路:

一个非常屎的模拟题。思路就是:

  • 先将b按花色存牌。
  • 非主牌花色内部先两两配对。
  • 如果某个非主牌花色是奇数张,就拿一张出来,给一张主牌去压它。
  • 最后剩下的主牌再内部两两配对。
  • 如果主牌数量不够这些落单牌,直接输出IMPOSSIBLE。

复杂度:O(n)

python 复制代码
import sys
input=sys.stdin.readline
from collections import deque
t=int(input())
c=['C','D','H','S']
r="23456789"
for _ in range(t):
    n=int(input())
    wp=input().strip()
    a=list(input().split())
    b={ch:[] for ch in c}
    #按花色分组
    for v in a:
        b[v[1]].append(v[0])
    #每个花色按点数从小到大排序
    for ch in c:
        b[ch].sort(key=lambda x:r.index(x))
    ans=[]
    left=[]#非主牌里落单,需要主牌去压的牌
    #先处理非主牌花色
    for ch in c:
        if ch==wp:
            continue
        m=len(b[ch])
        #两两配对,同花色后一个压前一个
        for i in range(0,m-1,2):
            ans.append((b[ch][i]+ch,b[ch][i+1]+ch))
        #如果是奇数张,最后一张留给主牌去压
        if m%2==1:
            left.append(b[ch][-1]+ch)
    #主牌数量不够接这些落单牌
    if len(b[wp])<len(left):
        print("IMPOSSIBLE")
        continue
    #用主牌去压非主牌落单
    p=0
    for card in left:
        ans.append((card,b[wp][p]+wp))
        p+=1
    #剩下的主牌内部两两配对
    rem=b[wp][p:]
    for i in range(0,len(rem),2):
        ans.append((rem[i]+wp,rem[i+1]+wp))
    for x,y in ans:
        print(x,y)
相关推荐
xcbrand15 小时前
口碑好的品牌策划厂家
大数据·人工智能·python
ZHOU_WUYI16 小时前
ppo算法简单实现
人工智能·pytorch·算法
liu****16 小时前
LangChain-AI应用开发框架(七)
人工智能·python·langchain·大模型应用·本地部署大模型
hhcgchpspk16 小时前
网速上传下载流量监测工具尝试
网络·python·cmd·psutil
飞Link16 小时前
大模型时代的“语言编程”:Prompt Engineering (提示词工程) 深度解析与实战指南
开发语言·python·prompt
无限进步_16 小时前
【C++】巧用静态变量与构造函数:一种非常规的求和实现
开发语言·c++·git·算法·leetcode·github·visual studio
郝学胜-神的一滴16 小时前
Socket实战:从单端聊天到多用户连接的实现秘籍
服务器·开发语言·python·网络协议·pycharm
zzwq.16 小时前
线程池与进程池:concurrent.futures高效并发
python
小超超爱学习993716 小时前
大数乘法,超级简单模板
开发语言·c++·算法
Ricardo-Yang17 小时前
SCNP语义分割边缘logits策略
数据结构·人工智能·python·深度学习·算法