零点工作室暑假集训(AtCoder--ABC244)

A - Last Letter

题意: 给你一串字符串,输出字符串的最后一位

AC代码

#include<bits/stdc++.h>

using namespace std;

typedef long long LL;

const int N = 200010;

int n;
string s;

int main()
{
    cin >> n;
    cin >> s;
    
    cout << s[n - 1];

    
    return 0;
}

B - Go Straight and Turn Right

题意: 考虑一个xy平面。x轴的正方向朝东,y轴的正方向朝北。高桥初始位置为(x, y) = (0, 0),面朝东方(x轴的正方向)。
给定一个长度为N的字符串T=t1t2…tN,由S和R组成。高桥将按照以下顺序执行每一步操作,i=1,2,…,N。
如果ti=S,则高桥沿当前方向前进1个单位距离。
如果ti=R,则高桥顺时针旋转90度,但不改变位置。结果是高桥的方向发生以下改变:
如果旋转前面向东方(x轴的正方向),旋转后会面向南方(y轴的负方向)。
如果旋转前面向南方(y轴的负方向),旋转后会面向西方(x轴的负方向)。
如果旋转前面向西方(x轴的负方向),旋转后会面向北方(y轴的正方向)。
如果旋转前面向北方(y轴的正方向),旋转后会面向东方(x轴的正方向)。
打印出高桥在执行以上所有步骤之后所处的坐标。

思路: 先写出方向偏移量const int dx[4] = {1, 0, -1, 0}; const int dy[4] = {0, -1, 0, 1};然后在模拟即可

AC代码

#include<bits/stdc++.h>

using namespace std;

typedef long long LL;

const int N = 100010, INF = 0x3f3f3f3f, Mod = 998244353;
const int dx[4] = {1, 0, -1, 0};
const int dy[4] = {0, -1, 0, 1};

char s[N];
int n;
int x = 0, y = 0, u = 0;

int main()
{
    cin >> n >> s + 1;
    
    for(int i = 1; i <= n; i ++)
    {
        if (s[i] == 'R')
        {
            u = (u + 1) % 4;
        }
        else
        {
            x += dx[u];
            y += dy[u];
        }
    }
    
    cout << x << ' ' << y << endl;
    
    return 0;
}

C - Yamanote Line Game

题意: Takahashi和Aoki将相互对战以下游戏。
从Takahashi开始,两人交替宣布一个介于1到2N+1(包括边界)之间的整数,直到游戏结束。任何一个玩家宣布的整数都不能由任何一方再次宣布。不能宣布整数的那一方输掉游戏;没有输掉的一方获胜。
在这个游戏中,Takahashi总是会获胜。你的任务是代表Takahashi玩游戏,并赢得比赛。

在这里插入图片描述
在这里插入图片描述

思路: 第一次遇见这种交互题,一开始有点懵0.0,读懂题意后,因为2 * n + 1是奇数 又因为B先输出 所以B一定能获胜,然后发现一个方法就是:B每次直接找[1, 2 * n + 1]中没有被输出的数输出即可

AC代码

#include<bits/stdc++.h>

using namespace std;

typedef long long LL;

const int N = 200010;

bool st[1010];
int n, x;
 
int main()
{
    cin >> n;
    cout << 1 << '\n';
    
    st[1] = 1;
    
    for(int i = 1; i <= n + 1; i ++)
    {
        cin >> x;
        if(x == 0)  return 0;
 
        st[x] = 1;
        for(int i = 1; i <= 2 * n + 1; i ++)
        {
            if(st[i] == false)
            {
                st[i] = 1;
                cout << i << endl;
                break;
            }
        }
    }
    
    return 0;
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值