Codeforces Round #373 (Div. 2)A B

Codeforces Round #373 (Div. 2)
A. Vitya in the Countryside

这回做的好差啊,a想不到被hack的数据,b又没有想到正确的思维 = =

【题目链接】A. Vitya in the Countryside

【题目类型】模拟

&题意:

一个月30天,月亮的大小分别是上面所说的规律,求输入的下一天是变大还是变小

&题解:
我想的是首先n==1的时候,我想的是一定-1,但这样是错的,因为当那一个数是15或0时,那么答案就不是-1了。
最后,只比较最后一个和倒数第二个数就好了,分4种情况。

【时间复杂度】O(n)

&代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define SI(N) scanf("%d",&(N))
#define rep(i,b) for(ll i=0;i<(b);i++)
int n, pre, x;
void Solve() {
    while (~SI(n)) {
        if (n == 1) {
            SI(x);
            if (x == 15) puts("DOWN");
            else if (x == 0) puts("UP");
            else puts("-1");
            continue;
        }
        rep(i, n) {
            pre = x;
            SI(x);
        }
        if (pre < x) puts(x == 15 ? "DOWN" : "UP");
        else puts(x != 0 ? "DOWN" : "UP");
    }
}
int main() {
    Solve();
    return 0;
}
B. Anatoly and Cockroaches

【题目链接】B. Anatoly and Cockroaches

【题目类型】思维题

&题意:
你要弄出rb交替的字符串,对于每个给出的字符,有2中俄操作:
1、把2个不同的位置交换。
2、把1个位置的染成不同的颜色、

&题解:

标准答案一共2种,r开头和b开头,即s1和s2,就只说s1时,s2同理:
把输入和s1比较,如果不同,要看是r还是b,之后记录不同时他们各个出现的次数,只有不同的位置才需要操作,假设r是6个b是3个,那么一定是3+3,因为要涂3个色,和交换3个。最后取最小值

&代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int INF = 0x3f3f3f3f;
#define cle(a,val) memset(a,(val),sizeof(a))
#define SI(N) scanf("%d",&(N))
#define rep(i,b) for(ll i=0;i<(b);i++)
const ll LINF = 0x3f3f3f3f3f3f3f3f;
#define PU(x) puts(#x);
#define PI(A) cout<<(A)<<endl;
const int MAXN = 100000 + 5 ;
char s1[MAXN],s2[MAXN],buf[MAXN];
int n;
void Solve()
{
    bool f=0;
    rep(i,MAXN)
    {
        s1[i]=f?'r':'b';
        f=!f;
    }
    f=1;
    rep(i,MAXN)
    {
        s2[i]=f?'r':'b';
        f=!f;
    }
    while(~SI(n)){
        scanf("%s",buf);
        int u=0,v=0;
        int cr=0,cb=0;
        rep(i,n)
        {
            if (s1[i]!=buf[i])
            {
                s1[i]=='b'?cb++:cr++;
            }
        }
        u=max(cr,cb);
        cr=0,cb=0;
        rep(i,n)
        {
            if (s2[i]!=buf[i])
            {
                s2[i]=='b'?cb++:cr++;
            }
        }
        v=max(cr,cb);
        PI(min(u,v))
    }
}
int main()
{
    Solve();
    return 0;
}

转载于:https://www.cnblogs.com/s1124yy/p/5906833.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值