A:暴力从小到大枚举判断。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 1000000010
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;}
int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
int read()
{
int x=0,f=1;char c=getchar();
while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x*f;
}
signed main()
{
#ifndef ONLINE_JUDGE
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
#endif
int n=read();
for (int i=n;i<=n+10000;i++)
{
int s=0,x=i;
while (x) s+=x%10,x/=10;
if (s%4==0) {cout<<i;return 0;}
}
return 0;
//NOTICE LONG LONG!!!!!
}

  B:显然max-min<=2k时有解,最优解为min+k。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 1000000010
#define N 110
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;}
int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
int read()
{
int x=0,f=1;char c=getchar();
while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x*f;
}
int q,n,k,a[N];
signed main()
{
q=read();
while (q--)
{
n=read(),k=read();
for (int i=1;i<=n;i++) a[i]=read();
int mn=inf,mx=0;
for (int i=1;i<=n;i++) mn=min(mn,a[i]),mx=max(mx,a[i]);
if (mx-k<=mn+k) cout<<mn+k<<endl;
else cout<<-1<<endl;
}
return 0;
//NOTICE LONG LONG!!!!!
}

  C:一点脑子都不想动可以二分答案。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 1000000010
#define N 110
#define int long long
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;}
int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
int read()
{
int x=0,f=1;char c=getchar();
while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x*f;
}
int q,k,n,a,b;
signed main()
{
q=read();
while (q--)
{
k=read()-1,n=read(),a=read(),b=read();
if (b*n>k) printf("-1\n");
else
{
int l=0,r=n,ans=0;
while (l<=r)
{
int mid=l+r>>1;
if (a*mid+b*(n-mid)<=k) ans=mid,l=mid+1;
else r=mid-1;
}
printf("%d\n",ans);
}
}
return 0;
//NOTICE LONG LONG!!!!!
}

  D、E:跳过。

  F:当只要求选择两个数时,显然选择最大值及最大的不是其因子的数最优。因为假设次大值是最大值的因子,那么次大值<=最大值/2,如果不选择最大值,两个数的和一定不大于最大值。于是考虑枚举最大值,剩下的数按上述方法选择。可以使用set删去因子,复杂度O(nsqrt(n)log(n))但也能跑过。实际上sort后枚举最大值并暴力找去掉因子的最大数复杂度就是O(nsqrt(n))。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 1000000010
#define N 200010
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;}
int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
int read()
{
int x=0,f=1;char c=getchar();
while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x*f;
}
int q,n,a[N],b[N],t;
set<int> f;
void del(int x)
{
f.erase(x);
b[++t]=x;
}
signed main()
{
q=read();
while (q--)
{
n=read();
for (int i=1;i<=n;i++) a[i]=read();f.clear();
sort(a+1,a+n+1);n=unique(a+1,a+n+1)-a-1;
int ans=0;
for (int i=1;i<=n;i++) f.insert(a[i]);
for (int i=n;i>=1;i--)
{
t=0;
int s=a[i];f.erase(a[i]);
for (int j=1;j*j<=a[i];j++)
if (a[i]%j==0)
{
if (f.find(j)!=f.end()) del(j);
if (f.find(a[i]/j)!=f.end()) del(a[i]/j);
}
if (!f.empty())
{
int x=*(--f.end());
for (int j=1;j*j<=x;j++)
if (x%j==0)
{
if (f.find(j)!=f.end()) del(j);
if (f.find(x/j)!=f.end()) del(x/j);
}
s+=x;
}
if (!f.empty()) s+=*(--f.end());
ans=max(ans,s);
for (int j=1;j<=t;j++) f.insert(b[j]);
}
printf("%d\n",ans);
}
return 0;
//NOTICE LONG LONG!!!!!
}
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 1000000010
#define N 200010
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;}
int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
int read()
{
int x=0,f=1;char c=getchar();
while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x*f;
}
int q,n,a[N];
signed main()
{
q=read();
while (q--)
{
n=read();
for (int i=1;i<=n;i++) a[i]=read();
sort(a+1,a+n+1);n=unique(a+1,a+n+1)-a-1;
int ans=0;
for (int i=n;i>=1;i--)
{
int s=a[i];int x=0;
for (int j=i-1;j>=1;j--)
if (a[i]%a[j]) {x=j,s+=a[j];break;}
for (int j=x-1;j>=1;j--)
if (a[i]%a[j]&&a[x]%a[j]) {s+=a[j];break;}
ans=max(ans,s);
}
printf("%d\n",ans);
}
return 0;
//NOTICE LONG LONG!!!!!
}

  G:求出每种糖果数量以及其中有多少个fi=1。然后从大到小考虑礼物中的糖果数量,将糖果数量足够的糖果种类加入set,取出Σfi最大的。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 1000000010
#define N 200010
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;}
int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
int read()
{
int x=0,f=1;char c=getchar();
while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x*f;
}
int q,n;
struct data
{
int x,y;
bool operator <(const data&a) const
{
return x<a.x||x==a.x&&y<a.y;
}
}a[N],c[N];
multiset<int> f;
signed main()
{
q=read();
while (q--)
{
n=read();
for (int i=1;i<=n;i++) a[i].x=read(),a[i].y=read();
sort(a+1,a+n+1);
int m=0;
for (int i=1;i<=n;i++)
{
int t=i;
while (t<n&&a[t+1].x==a[i].x) t++;
c[++m].x=t-i+1;c[m].y=0;
for (int j=i;j<=t;j++) if (a[j].y==1) c[m].y++;
i=t;
}
sort(c+1,c+m+1);reverse(c+1,c+m+1);
int cur=0,ans=0,ans2=0;f.clear();
for (int i=n;i>=1;i--)
{
while (cur<m&&c[cur+1].x>=i)
{
f.insert(c[++cur].y);
}
if (!f.empty())
{
ans+=i;
ans2+=min(i,*(--f.end()));
f.erase(--f.end());
}
}
printf("%d %d\n",ans,ans2);
}
return 0;
//NOTICE LONG LONG!!!!!
}

  H:建出序列自动机(对每个位置求出每个字符下一次出现位置),然后dp出长度为i的本质不同子序列数量即可。注意数量对k取min。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 1000000010
#define N 110
#define int long long
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;}
int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
int read()
{
int x=0,f=1;char c=getchar();
while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x*f;
}
int n,f[N][N],nxt[N][26];
ll k,ans;
char s[N];
signed main()
{
n=read();ll k;cin>>k;
scanf("%s",s+1);
ans=k*n;
for (int i=0;i<26;i++) nxt[n+1][i]=n+1;
for (int i=n;i>=1;i--)
{
for (int j=0;j<26;j++) nxt[i][j]=nxt[i+1][j]; nxt[i][s[i]-'a']=i;
}
for (int i=0;i<=n;i++) f[i][1]=1;
for (int i=2;i<=n+1;i++)
for (int j=n;j>=0;j--)
{
for (int k=0;k<26;k++)
f[j][i]+=f[nxt[j+1][k]][i-1];
f[j][i]=min(f[j][i],k);
}
for (int i=n+1;i>=1;i--)
{
if (k>f[0][i]) ans-=(i-1)*f[0][i],k-=f[0][i];
else {ans-=(i-1)*k;k=0;break;}
}
if (k) cout<<-1;else
cout<<ans;
return 0;
//NOTICE LONG LONG!!!!!
}

  小号5。result:rank 2 rating +322

Codeforces Round #570 Div. 3的更多相关文章

  1. Codeforces Round #570 (Div. 3) B. Equalize Prices

    原文链接https://codeforces.com/contest/1183/problem/B 题意:进行Q组测试,在每组中有长度为n的数组a[i],然后现在给你一个K,问你找到一个bi使得|ai ...

  2. Codeforces Round #570 (Div. 3) E. Subsequences (easy version) (搜索,STL)

    题意:有一长度为\(n\)的字符串,要求得到\(k\)不同的它的子序列(可以是空串),每个子序列有\(|n|-|t|\)的贡献,求合法情况下的最小贡献. 题解:直接撸个爆搜找出所有子序列然后放到set ...

  3. Codeforces Round #570 (Div. 3) G. Candy Box (hard version) (贪心,优先队列)

    题意:你有\(n\)个礼物,礼物有自己的种类,你想将它们按种类打包送人,但是打包的礼物数量必须不同(数量,与种类无关),同时,有些礼物你想自己留着,\(0\)表示你不想送人,问你在送出的礼物数量最大的 ...

  4. Codeforces Round #570 (Div. 3) B. Equalize Prices、C. Computer Game、D. Candy Box (easy version)、E. Subsequences (easy version)

    B题题意: 给你n个物品的价格,你需要找出来一个值b,使得每一个物品与这个b的差值的绝对值小于k.找到最大的b输出,如果找不到,那就输出-1 题解: 很简单嘛,找到上下限直接二分.下限就是所有物品中最 ...

  5. Codeforces Round #366 (Div. 2) ABC

    Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...

  6. Codeforces Round #354 (Div. 2) ABCD

    Codeforces Round #354 (Div. 2) Problems     # Name     A Nicholas and Permutation standard input/out ...

  7. Codeforces Round #368 (Div. 2)

    直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...

  8. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

  9. Codeforces Round #279 (Div. 2) ABCDE

    Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems     # Name     A Team Olympiad standard input/outpu ...

随机推荐

  1. 洛谷 P1948 [USACO08JAN]电话线Telephone Lines 题解

    P1948 [USACO08JAN]电话线Telephone Lines 题目描述 Farmer John wants to set up a telephone line at his farm. ...

  2. 洛谷 P5506 封锁

    目录 题目 思路 \(Code\) 题目 P5506 封锁 思路 模拟 \(\large\text{读题一定要细心}\) 解释都在代码里. \(Code\) #include<bits/stdc ...

  3. SqlServer 数据库同步的两种方式 (发布、订阅),主从数据库之间的同步

    最近在琢磨主从数据库之间的同步,公司正好也需要,在园子里找了一下,看到这篇博文比较详细,比较简单,本人亲自按步骤来过,现在分享给大家. 在这里要提醒大家的是(为了更好的理解,以下是本人自己理解,如有错 ...

  4. Nova官方资料入口处

    Nova官方资料地址: https://www.openstack.org/software/releases/queens/components/nova --> https://wiki.o ...

  5. Network Function Virtualization: Challenges and Opportunities for Innovations

    年份:2015 ABSTRACT 最近提出了网络功能虚拟化,以提高网络服务供应的灵活性并减少新服务的上市时间. 通过利用虚拟化技术和通用的商用可编程硬件(例如通用服务器,存储和交换机),NFV可以将网 ...

  6. sip user Authentication and 401

    https://www.vocal.com/sip-2/sip-user-authentication/ https://tools.ietf.org/html/rfc3261 SIP User Au ...

  7. 【转】怎么去阅读Chromium的源码?

    同样路过一下. 从初学者角度的话,如果是刚开始研究chromium,建议找个老版本chromium来看.新版太大太复杂了. 我建议从github搜下chromium.bb这个项目,是个chromium ...

  8. 接口测试中模拟post四种请求数据

    https://www.jianshu.com/p/3b6d7aa2043a 一.背景介绍 在日常的接口测试工作中,模拟接口请求通常有两种方法,fiddler模拟和HttpClient模拟. Fidd ...

  9. Python之pandas读取mysql中文乱码问题

    # -*- coding: utf-8 -*- # author:baoshan import pandas as pd import pymysql config = { "host&qu ...

  10. WebGL学习笔记(四):绘图

    图元 WebGL可以绘制非常复杂的3D模型,这些模型都是由下面3种基本几何图元构成的,下面我们来详细的看看. 三角形 WebGL中任何复杂的模型,都是由三角形组合而成的,可以说三角形是任意形状的最小构 ...