IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> Educational Codeforces Round 123 (Rated for Div. 2) ABC -> 正文阅读

[C++知识库]Educational Codeforces Round 123 (Rated for Div. 2) ABC

Problem - A - Codeforces

题目大意:有红r 绿g 蓝b 三把钥匙,还有红R 绿G 蓝B三扇门,先拿钥匙再碰到门就可以开了,三扇门都能开YES,不能NO。

input

4
rgbBRG
RgbrBG
bBrRgG
rgRGBb

output

YES
NO
YES
NO
#include<iostream>
#include<cmath>
#include<algorithm>
#include<string>
#include<cstring>
#include<cstdlib>
#include<map>
using namespace std;
int main()
{
    //cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
    int t;
    cin>>t;
    while(t--)
    {
        string s;
        cin>>s;
        int a1,a2,a3,b1,b2,b3;
        for(int i=0;i<s.size();i++)
        {
            if(s[i]=='r') a1=i;
            else if(s[i]=='R') b1=i;
            else if(s[i]=='g') a2=i;
            else if(s[i]=='G') b2=i;
            else if(s[i]=='b') a3=i;
            else b3=i;
        }
        //cout<<a1<<" "<<a2<<" "<<a3<<" "<<b1<<" "<<b2<<" "<<b3<<endl;
        bool flag=true;
        if(a1>b1||a2>b2||a3>b3) flag=false;
        if(flag==false) cout<<"NO"<<endl;
        else cout<<"YES"<<endl;
    }
    return 0;
}

Problem - B - Codeforces

题目大意:如果条件P[i?2]+P[i?1]≠Pi对所有i(3≤i≤n)成立,我们称长度为n的置换P为反斐波纳契函数。给定一个数字n,让我们求出1~n个数字组成的n个反斐波纳契函数(any)。

input

2
4
3

output

4 1 3 2
1 2 4 3
3 4 1 2
2 4 1 3
3 2 1
1 3 2
3 1 2

一开始用纯暴力做法妥妥的超时了,变换一下思维即可。?

#include<iostream>
#include<cmath>
#include<algorithm>
#include<string>
#include<cstring>
#include<cstdlib>
#include<map>
using namespace std;
int a[200200];
int main()
{
    cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        for(int i=1;i<=n;i++)
            a[i]=n-i+1;
        for(int i=1;i<=n;i++) cout<<a[i]<<" "; cout<<endl;
        /*int sum=0;
        do
        {
            bool flag=true;
            //cout<<"11111"<<endl;
            for(int i=3;i<=n;i++)
            {
                if(a[i-2]+a[i-1]==a[i])
                {
                    flag=false;
                    break;
                }
            }
            if(flag==true&&sum!=n)
            {
                for(int i=1;i<=n;i++)
                    cout<<a[i]<<" ";
                cout<<endl;
                sum++;
            }
            if(sum==n) break;
        }while(next_permutation(a+1,a+1+n));*/
        int sum=1;
        while(sum!=n)
        {
            for(int i=1;i<=n;i++)
            {
                if(i==sum) cout<<a[sum+1]<<" "<<a[sum]<<" ",i++;
                else cout<<a[i]<<" ";
            }
            cout<<endl;
            sum++;
        }
    }
    return 0;
}

Problem - C - Codeforces

题目大意:给定一个长度为n的数组a,再给定一个数字x。每次在数组中加上k个x,k的范围属于0~n(可非连续加入),然后分别求最大区间和。

input

3
4 2
4 1 3 2
3 5
-2 -7 -1
10 2
-6 -1 -2 4 -6 -1 -4 4 -5 -4

output

10 12 14 16 18
0 4 4 5
4 6 6 7 7 7 7 8 8 8 8

分别求出长度为i的最大和,然后分别加上n个k。

#include<iostream>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<string>
#include<algorithm>
using namespace std;
int a[200200],b[200200],f[200200];
int main()
{
    cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
    int t;
    cin>>t;
    while(t--)
    {
        int n,x;
        cin>>n>>x;
        for(int i=1;i<=n;i++)
            cin>>a[i];
        memset(b,0,sizeof b);
        memset(f,-0x3f3f3f3f,sizeof f);
        for(int i=1;i<=n;i++)//前缀和
        {
            if(i==1) b[1]=a[1];
            else b[i]=b[i-1]+a[i];
        }
        //for(int i=1;i<=n;i++) cout<<b[i]<<" "; cout<<endl;
        for(int i=1;i<=n;i++)
        {
            for(int len=1;len<=n;len++)//长度从1到n依次遍历
            {
                if(i+len-1<=n) //如果没有越界的话
                    f[len]=max(f[len],b[i+len-1]-b[i-1]);//更新长度就是i+len-1到i-1的前缀和
            }
        }
        for(int i=0;i<=n;i++)//输出部分,依次进行比较
        {
            int maxn=-0x3f3f3f3f;
            for(int len=1;len<=n;len++)//长度也是从1到n
            {
                maxn=max(maxn,f[len]+min(i,len)*x);
            }
            cout<<max(0,maxn)<<" ";//怕会出现负数
        }
        cout<<endl;
    }
    return 0;
}

?唔,真就贪心贪麻了

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-02-28 15:10:05  更:2022-02-28 15:11:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:14:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码