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++知识库 -> 补提计划 Codeforces Round #760 (Div. 3) -> 正文阅读

[C++知识库]补提计划 Codeforces Round #760 (Div. 3)

A

#include<bits/stdc++.h>
using namespace std;
const int maxn=10;
int f[maxn];
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        for(int i=1;i<=7;i++)scanf("%d",&f[i]);
        sort(f+1,f+8);
        int a=f[1],b=f[2];
        int c;
        if(f[3]==a+b)c=f[4];
        else c=f[3];
        printf("%d %d %d\n",a,b,c);
    }
}

B

#include<bits/stdc++.h>
using namespace std;
// const int maxn=10;
bool st[2];
char op[110][5];
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int n;
        scanf("%d",&n);
        bool flag=false;
        memset(st,false,sizeof(st));
        memset(op,0,sizeof(op));
        for(int i=1;i<=n-2;i++)
        {
            scanf("%s",op[i]+1);
            if(i!=1&&op[i][1]!=op[i-1][2])
            {
                printf("%c",op[i-1][2]);
                flag=true;
            }
            printf("%c",op[i][1]);
            st[op[i][1]-'a']=true;
        }
        if(flag)
        {
            printf("%c\n",op[n-2][2]);
        }
        else
        {
            printf("%c",op[n-2][2]);
            if(!st[0])printf("a\n");
            else printf("b\n");
        }
        // cout<<1<<endl;
    }
}

C gcd乱搞

#include<bits/stdc++.h>
#define int long long
using namespace std;
// const int maxn=10;
typedef long long ll;
ll a[117];
signed main()
{
   int T;
   scanf("%d",&T);
   while(T--)
   {
       int n;
       scanf("%d",&n);
       for(int i=1;i<=n;i++)
       scanf("%lld",&a[i]);
       if(n==2)
       {
           sort(a+1,a+3);
           if(a[1]==a[2])printf("0\n");
           else
           printf("%lld\n",a[2]);
           continue;
       }
       
       int d=a[1];
       for(int i=1;i<=n;i+=2)
       {
           d=gcd(d,a[i]);
       }
       bool flag=false;
    for(int i=2;i<=n;i+=2)
       if(a[i]%d==0)
       {
           flag=true;
           break;
       }
      bool flag2=false;
      
      
       if(flag)
       {
           flag=true;
           d=a[2];
           for(int i=2;i<=n;i+=2)
           d=__gcd(d,a[i]);
           for(int i=1;i<=n;i+=2)
           if(a[i]%d==0)
           {
               flag2=true;
               break;
           }
       }
       if(flag&&flag2)printf("0\n");
       else printf("%lld\n",d);
   }
}

D?

#include<bits/stdc++.h>
using namespace std;
const int maxn=110;
int a[maxn];
bool st[maxn];
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int n,k;
        scanf("%d%d",&n,&k);
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&a[i]);
        }
        sort(a+1,a+n+1);
        int res=0;
      for(int i=n-2*k+1;i<=n-k;i++)
      {
          res+=a[i]/a[i+k];
      }
       for(int i=1;i<n-2*k+1;i++)
       res+=a[i];
        printf("%d\n",res);
    }
}

E

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+10;
int b[maxn];
int a[maxn];
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)scanf("%d",&b[i]);
        ll sum=0;
        for(int i=1;i<=n;i++)sum+=b[i];
        ll x=1ll*n*(n+1)/2;
        if(sum%x)
        {
            printf("NO\n");
            continue;
        }
        sum/=x;
        bool flag=true;
        for(int i=1;i<=n;i++)
       { a[i]=sum+b[(i+n-2)%(n)+1]-b[i];
           if(a[i]<=0||a[i]%n)
           {
               flag=false;
               break;
           }
           a[i]/=n;
       }
       if(!flag)
       {
           printf("NO\n");
       }
       else
       {
           printf("YES\n");
           for(int i=1;i<=n;i++)printf("%d ",a[i]);
           printf("\n");
       }
    }
    
}

F

当作字符串去做,可以发现最开始输入的数x可以转变为4个不同的01字符串str

并且str的begin和end都为1

然后仔细推测不难发现y必定是这四种可能在前面加有限个1,在后面加有限个1构成的

然后就暴力去做好了。

当然也可以bfs或dfs,那种剪枝的原理我感觉挺神奇的

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
vector<int> a,b;
bool get(vector<int> t)
{
    for(int i=0;i<b.size();i++)
    {
        bool flag=true;
        if(t.size()+i-1>=b.size())return false;
        for(int j=0;j<t.size();j++)
        if(b[i+j]!=t[j]){flag=false;break;}
        if(!flag)continue;
        for(int j=0;j<i;j++)if(b[j]==0){flag=false;break;}
        for(int j=t.size()+i-1;j<b.size();j++)if(b[j]==0){flag=false;break;}
        if(flag)return true;
    }
    return false;
}
bool check(vector<int> t)
{
    if(get(t))return true;
    reverse(t.begin(),t.end());
    if(get(t))return true;
    return false;
}
void solve()
{
    a.push_back(1);
    if(check(a)){printf("YES\n");return ;}
    a.pop_back();
    while(a.size()&&a.back()==0)a.pop_back();
    if(check(a)){printf("YES\n");return ;}
    printf("NO\n");return ;
}
int main()
{
    ll x,y;
    scanf("%lld%lld",&x,&y);
    if(x==y){printf("YES");return 0;}
    while(x)a.push_back(x%2),x/=2;
    while(y)b.push_back(y%2),y/=2;
    reverse(a.begin(),a.end());
    reverse(b.begin(),b.begin());
    solve();
}

G

这个构思是真的巧妙,用并查集做。

储存好a和b的初始id,然后把他们用pair合并之后排序。k'也按照升序排序。

每个a本身都有一个size,且size=1。

只有合并的时候会使得size可能增大(因为并不能保证两个集合里的size都>1)

#include<bits/stdc++.h>
#define x first
#define y second
using namespace std;
typedef long long ll;
const int maxn=2e5+10;
typedef pair<int,int> pii;
pii query[maxn],a[maxn<<1];
ll ans[maxn<<1],sum[maxn<<1];
int p[maxn<<1];
int siz[maxn<<1];
map<int,vector<int>> mp;
int find(int x)
{
    if(p[x]!=x) p[x]=find(p[x]);
    return p[x];
}
int main()
{
    int n,m,q;
    scanf("%d%d%d",&n,&m,&q);
    for(int i=1;i<=n+m;i++)scanf("%d",&a[i].x),a[i].y=i;
    sort(a+1,a+n+m+1);
    for(int i=1;i<=q;i++)scanf("%d",&query[i].x),query[i].y=i;
    sort(query+1,query+q+1);
    ll res=0;
    for(int i=1;i<=n+m;i++)
    {
        siz[i]=(a[i].y<=n);
        p[i]=i;
        if(i>1)mp[a[i].x-a[i-1].x].push_back(i-1);
        sum[i]=sum[i-1]+a[i].x;
        if(a[i].y<=n)res+=a[i].x;
    }
    auto it=mp.begin();
    for(int i=1;i<=q;i++)
    {
        if(query[i].x==query[i-1].x){ans[query[i].y]=res;continue;}
        while(it!=mp.end()&&it->x<=query[i].x)
        {
            for(auto t:it->y)
            {
                int xi=find(t),yi=find(t+1);
                res-=sum[xi]-sum[xi-siz[xi]]+sum[yi]-sum[yi-siz[yi]];
                siz[yi]+=siz[xi],p[xi]=yi;
                res+=sum[yi]-sum[yi-siz[yi]];
            }
            it++;
        }
        ans[query[i].y]=res;
    }
    for(int i=1;i<=q;i++)printf("%lld\n",ans[i]);
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-02-07 13:32:31  更:2022-02-07 13:34:12 
 
开发: 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:50:53-

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