Codeforces Global Round 7

A. Bad Ugly Numbers

put(2333...333)

B. Maximums

a[i]=b[i]=MAX;
MAX=max(MAX,a[i]);

C. Permutation Partitions

#include<bits/stdc++.h>
using namespace std;
#define me(a,x) memset(a,x,sizeof(a))
#define sc scanf
#define pr printf
#define IN freopen("in.txt","r",stdin);
#define OUT freopen("out.txt","w",stdout);
typedef long long ll;
typedef unsigned long long ull;
const int N=1e6+6;
const int mod=998244353;
template<typename T>int O(T s){cout<<s<<endl;return 0;}
template<typename T>void db(T *bg,T *ed){while(bg!=ed)cout<<*bg++<<' ';pr("\n");}
template<typename T>void db(vector<T>it){for(auto i:it)cout<<i<<' ';pr("\n");}
inline ll mul_64(ll x,ll y,ll c){return (x*y-(ll)((long double)x/c*y)*c+c)%c;}
inline ll ksm(ll a,ll b,ll c){ll ans=1;for(;b;b>>=1,a=a*a%c)if(b&1)ans=ans*a%c;return ans;}
inline void exgcd(ll a,ll b,ll &x,ll &y){if(!b)x=1,y=0;else exgcd(b,a%b,y,x),y-=(a/b)*x;}
int n,k;
int p[N];
int pos[N]={0};
int main(){
   // IN
    cin>>n>>k;
    for(int i=0;i++<n;sc("%d",&p[i]));
    ll ans=0,res=1;
    for(int i=n;k;i--,k--)ans+=i,pos[i]=1;
    int last=0;
    for(int i=1;i<=n;i++){
        if(pos[p[i]]){
            if(!last){
                last=i;continue;
            }
            res=res*(i-last)%mod;
            last=i;
        }
    }
    cout<<ans<<" "<<res<<endl;
}

D1,D2. Prefix-Suffix Palindrome (Hard version)
找到前缀和后缀最长的,将中间的字符串拿出来找最长回文前缀,后缀,可以用KMP算法,hash,manacher或者回文树。

#include<bits/stdc++.h>
using namespace std;
#define me(a,x) memset(a,x,sizeof(a))
#define sc scanf
#define pr printf
#define IN freopen("in.txt","r",stdin);
#define OUT freopen("out.txt","w",stdout);
typedef long long ll;
typedef unsigned long long ull;
const int N=2e6+6;
const int mod=1e9+7;
template<typename T>int O(T s){cout<<s<<endl;return 0;}
template<typename T>void db(T *bg,T *ed){while(bg!=ed)cout<<*bg++<<' ';pr("\n");}
template<typename T>void db(vector<T>it){for(auto i:it)cout<<i<<' ';pr("\n");}
inline ll mul_64(ll x,ll y,ll c){return (x*y-(ll)((long double)x/c*y)*c+c)%c;}
inline ll ksm(ll a,ll b,ll c){ll ans=1;for(;b;b>>=1,a=a*a%c)if(b&1)ans=ans*a%c;return ans;}
inline void exgcd(ll a,ll b,ll &x,ll &y){if(!b)x=1,y=0;else exgcd(b,a%b,y,x),y-=(a/b)*x;}
int L[N]={-1};
int kmp(const string& s){
    int i=0,j=-1,n=s.size();L[0]=-1;
    while(i<n)if(j==-1||s[i]==s[j])L[++i]=++j;else j=L[j];
    return L[n];
}
int main(){
   // IN
    int t;cin>>t;
    while(t--){
        string s;cin>>s;
        int l=0,r=(int)s.size()-1;
        if(r==0){
            O(s);continue;
        }
        while(l<r&&s[l]==s[r])l++,r--;
        string s1="",s2="";
        if(l)s1=s.substr(0,l),s2=s.substr(r+1);
        s=s.substr(l,r-l+1);string t=s;reverse(t.begin(),t.end());
        string a=s+"1"+t,b=t+"1"+s;
        string x=s.substr(0,kmp(a));
        string y=t.substr(0,kmp(b));
        if(x.size()<y.size())swap(x,y);
        cout<<s1<<x<<s2<<endl;
    }
}

E. Bombs
图片说明

#include<bits/stdc++.h>
using namespace std;
#define me(a,x) memset(a,x,sizeof(a))
#define sc scanf
#define pr printf
#define IN freopen("in.txt","r",stdin);
#define OUT freopen("out.txt","w",stdout);
typedef long long ll;
typedef unsigned long long ull;
const int N=3e5+6;
const int mod=1e9+7;
template<typename T>int O(T s){cout<<s<<endl;return 0;}
template<typename T>void db(T *bg,T *ed){while(bg!=ed)cout<<*bg++<<' ';pr("\n");}
template<typename T>void db(vector<T>it){for(auto i:it)cout<<i<<' ';pr("\n");}
inline ll mul_64(ll x,ll y,ll c){return (x*y-(ll)((long double)x/c*y)*c+c)%c;}
inline ll ksm(ll a,ll b,ll c){ll ans=1;for(;b;b>>=1,a=a*a%c)if(b&1)ans=ans*a%c;return ans;}
inline void exgcd(ll a,ll b,ll &x,ll &y){if(!b)x=1,y=0;else exgcd(b,a%b,y,x),y-=(a/b)*x;}
int n;
int p[N],q[N];
int pos[N];
struct sigment{
    int MAX[N*4+1],add[N*4+1];
    void push(int rt){
        if(add[rt]){
            add[rt<<1]+=add[rt];
            add[rt<<1|1]+=add[rt];
            MAX[rt<<1]+=add[rt];
            MAX[rt<<1|1]+=add[rt];
        }
        add[rt]=0;
    }
    void up(int l,int r,int val,int rt=1,int L=1,int R=n){
        if(L>=l&&R<=r){
            add[rt]+=val;
            MAX[rt]+=val;
            return;
        }
        push(rt);
        int mid=L+R>>1;
        if(mid>=l)up(l,r,val,rt<<1,L,mid);
        if(mid<r)up(l,r,val,rt<<1|1,mid+1,R);
        MAX[rt]=max(MAX[rt<<1],MAX[rt<<1|1]);
    }
}T;
int main(){
    cin>>n;
    for(int i=0;i++<n;sc("%d",&p[i]),pos[p[i]]=i);
    for(int i=0;i++<n;sc("%d",&q[i]));
    int ans=n;T.up(1,pos[n],1);
    for(int i=1;i<=n;i++){
        pr("%d ",ans);
        if(i==n)return O("");
        T.up(1,q[i],-1);
        while(T.MAX[1]<=0)T.up(1,pos[--ans],1);
    }
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-16 12:18
点赞 评论 收藏
分享
程序员小白条:你是沟通了900个,不是投了900份简历,你能投900份,意味着对面都要回复你900次,你早就找到实习了,没亮点就是这样的,别局限地区,时间投的也要早,现在都要7月了
点赞 评论 收藏
分享
来个厂收我吧:首先,市场侧求职我不是很懂。 但是,如果hr把这份简历给我,我会觉得求职人不适合做产品经理。 问题点: 1,简历的字体格式不统一,排版不尽如人意 2,重点不突出,建议参考star法则写个人经历 3,印尼官方货币名称为印度尼西亚卢比(IDR),且GMV690000印尼盾换算为305人民币,总成交额不高。 4,右上角的意向职位在发给其他公司时记得删除。 5,你所有的经历都是新媒体运营,但是你要投市场营销岗位,jd和简历不匹配,建议用AI+提示词,参照多个jd改一下经历内容。 修改建议: 1,统一字体(中文:思源黑体或微软雅黑,英文数字:time new romans),在word中通过表格进行排版(b站学) 2,校招个人经历权重:实习经历=创业经历(大创另算)>项目经历>实训经历>校园经历 3,请将项目经历时间顺序改为倒序,最新的放最上方。 4,求职方向不同,简历文字描述侧重点也需要不同。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务