首页 > 代码库 > 暑假集训cf50练之3

暑假集训cf50练之3

Codeforces Round #349 (Div. 2)

第一题直接算就行了为了追求手速忘了输出yes导致wa了一发。。。

第二题技巧题,直接sort,然后把最大的和其他的相减就是构成一条直线,为了满足条件就+1

技术分享
#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<cstdio>
#include<iomanip>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define pi acos(-1)
#define ll long long
#define mod 1000000007
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
#define MIN(a,b) a<b ? a:b

using namespace std;

const double g=10.0,eps=1e-9;
const int N=100000+10,maxn=10000+10,inf=0x3f3f3f;

ll a[N];
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    ll n,sum=0;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
        sum+=a[i];
    }
    sort(a,a+n);
    cout<<2*a[n-1]-sum+1<<endl;
    return 0;
}
B

第三题没来的及写就打另一场去了。。。发现是道dp(我估计写了也写不对)用dp[i][0]表示i到i+2能否截取,dp【i】【1】表示i到i+3能否截取

然后从后向前扫一遍

技术分享
#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<cstdio>
#include<cassert>
#include<iomanip>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define pi acos(-1)
#define ll long long
#define mod 1000000007
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
#pragma comment(linker, "/STACK:1024000000,1024000000")

using namespace std;

const double g=10.0,eps=1e-9;
const int N=10000+10,maxn=300,inf=0x3f3f3f;

bool dp[N][2];
set<string>ans;
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    string s;
    cin>>s;
    for(int i=s.size()-1;i>=5;i--)
    {
        if(i+2==s.size())
        {
            dp[i][0]=1;
            ans.insert(s.substr(i,2));
            continue;
        }
        if(i+3==s.size())
        {
            dp[i][1]=1;
            ans.insert(s.substr(i,3));
            continue;
        }
        if(dp[i+2][1]||(dp[i+2][0]&&s.substr(i,2)!=s.substr(i+2,2)))
        {
            dp[i][0]=1;
            ans.insert(s.substr(i,2));
        }
        if(dp[i+3][0]||(dp[i+3][1]&&s.substr(i,3)!=s.substr(i+3,3)))
        {
            dp[i][1]=1;
            ans.insert(s.substr(i,3));
        }
    }
    cout<<ans.size()<<endl;
    set<string>::iterator it;
    for(it=ans.begin();it!=ans.end();it++)
        cout<<*it<<endl;
    return 0;
}
C

D,E待补

暑假集训cf50练之3