【AcWing】递推(就是那种很棘手的题)

简介: 1208. 翻硬币 - AcWing题库

1208. 翻硬币 - AcWing题库

7.1.png

#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 110;
int n;
char start[N], aim[N];
void turn(int i)
{
    if (start[i] == '*') start[i] = 'o';
    else start[i] = '*';
}
int main()
{
    cin >> start >> aim;
    n = strlen(start);
    int res = 0;
    for (int i = 0; i < n - 1; i ++ )
        if (start[i] != aim[i])
        {
            turn(i);//反转
            turn(i + 1);
            res ++ ;
        }
    cout << res << endl;
    return 0;
}

3777. 砖块 - AcWing题库

这个题,就是不看来源我就知道是cf的题(不要问我为什么)

7.2.png

🚥🚥🚥

注意翻硬币的过程,是从前往后递推

就是先变第1个,然后第2个,第3个,第4个......

🚥🚥🚥

#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
int n;
string str;
void update(char& c)//引用
{
    if (c == 'W') c = 'B';//更换颜色
    else c = 'W';
}
bool check(char c)
{
    vector<int> res;
    string s = str;
    for (int i = 0; i + 1 < n; i ++ )
    {
        if (s[i] != c)
        {
            update(s[i]);
            update(s[i + 1]);
            res.push_back(i);//存下这个操作,因为下面要输出
        }
    }
    if (s.back() != c) return false;//就是没有全部变为一个颜色
    cout << res.size() << endl;
    for (int x: res) cout << x + 1 << ' ';//因为题目中的下标从1开始
    if (res.size()) cout << endl;
    return true;
}
int main()
{
    int T;
    cin >> T;
    while (T -- )
    {
        cin >> n >> str;
        if (!check('B') && !check('W')) puts("-1");
        //判断能不能全部变为一个颜色
        //注意,check的返回类型为bool类型
    }
    return 0;
}

P1146 硬币翻转 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

7.3.png

翻n-1枚硬币,就是有一枚不翻,也可以理解为翻一枚

那么把所有的硬币都翻过来,操作次数=硬币个数

🚥🚥🚥

但是可不能这样子写,因为要输出具体的操作方法

image.png

代码

#include<iostream>
using namespace std;
const int maxn=101;
bool a[maxn];//a数组负责存储硬币的状态
int n;//n枚硬币
int main()
{
    cin>>n;
    cout<<n<<endl;//因为相当于只翻一枚,所以翻n次即可
    for(int i=1;i<=n;i++){//i表示这是第几次翻
        for(int j=1;j<=n;j++){//表示当前翻得是第几枚硬币
            if(j!=i){//如果不为第i枚(因为翻的是n-1枚)
                if(a[j])a[j]=0;//1变成0
                else a[j]=1;//0变成1
            }
            cout<<a[j];//输出当前状态
        }
        cout<<endl;//别忘了换行
    }
    return 0;
}

Code over!

相关文章
|
监控 架构师 前端开发
软件研发管理制度
软件研发管理制度
4044 1
|
存储 边缘计算 安全
阿里云全球基础设施展示,公共云地域、边缘节点、超级数据中心分布图
本文为大家介绍了阿里云在2024年的全球基础设施布局,包括公共云地域、边缘节点、超级数据中心等各个阶段和方面。阿里云基础设施已覆盖全球四大洲,拥有30个公共云地域和89个可用区,以及超过3200个边缘节点,为其用户提供了广泛且深入的服务覆盖。
阿里云全球基础设施展示,公共云地域、边缘节点、超级数据中心分布图
|
消息中间件 缓存 算法
我在项目里用雪花算法搞了唯一ID生成,结果上线就引发了故障...
我在项目里用雪花算法搞了唯一ID生成,结果上线就引发了故障...
|
JSON 缓存 小程序
【小程序项目开发-- 京东商城】uni-app开发之配置 tabBar & 窗口样式
【小程序项目开发-- 京东商城】uni-app开发之配置 tabBar & 窗口样式
【小程序项目开发-- 京东商城】uni-app开发之配置 tabBar & 窗口样式
|
存储 分布式计算 监控
操作审计最佳实践:将阿里云操作日志持续投递到您的 SLS/OSS
操作审计(ActionTrail)帮助您监控并记录阿里云账号的活动,包括通过阿里云控制台、OpenAPI、开发者工具对云上产品和服务的访问和使用行为,记录为操作日志。 操作审计支持所有阿里云账号的免开通服务,默认为所有账号记录并存储近 90 天的日志。但在实际应用中,受法律法规和企业审计标准的要求,...
1655 0
L1-6 烤地瓜 (15 分)
在快乐的北街这里有好几家烤地瓜店,而每一家店都有相应的评分N(评分为一个正整数),琳认为这些评分不是自己评的,所以不具有很大的参考价值,于是她想到一个办法:列出已给评分的所有真因子(一个数的真因子为不包含它本身的其他正因子),将其中的质因子划去,再对剩下的因子相加求和,这个求和得到的结果即为琳对这个地瓜店的真实评分。 琳现在太想吃烤地瓜了,但是不想去计算地瓜店的真实评分,同时也不愿意随便找一家地瓜店,刚好你在旁边,你很想帮助她,于是你为琳编写了一个程序来计算地瓜店的真实评分。
302 0
L1-6 烤地瓜 (15 分)
|
存储 安全 开发工具
启动优化--二进制重排
启动优化--二进制重排
589 0
启动优化--二进制重排
|
JSON JavaScript 前端开发
【Angular教程】-组件初识|8月更文挑战
【Angular教程】-组件初识|8月更文挑战
322 0
【Angular教程】-组件初识|8月更文挑战

热门文章

最新文章