0
点赞
收藏
分享

微信扫一扫

2022牛客寒假算法基础集训营1 L E J H F C D A

未定义变量 2022-01-26 阅读 22

2022牛客寒假算法基础集训营1 L E J H F C D A

L 牛牛学走路

  • 参考代码:
#include<bits/stdc++.h>
using namespace std;
#define mp make_pair
#define int long long 
#define re register int
#define pb emplace_back
#define lowbit(x) (x&-x)
#define fer(i,a,b) for(re i = a ; i <= b ; i ++)
#define der(i,a,b) for(re i = a ; i >= b ; i --)
#define snow ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int gcd(int a,int b){return b?gcd(b,a%b):a;}
int lcm(int a,int b){return a*b/gcd(a,b);}
typedef pair<int,int>PII;
typedef pair<int,string>PIS;
signed main(){
    int t;
    cin>>t;
    while(t--){
        double MA=0;
        int n;
        cin>>n;
        string s;
        cin>>s;
        int x=0,y=0;
        int x1=x;
        int y1=y;
        for(int i=0;i<s.size();i++){
            if(s[i]=='L')y1--;
            else if(s[i]=='R')y1++;
            else if(s[i]=='U')x1--;
            else if(s[i]=='D')x1++;
            MA=max(MA,sqrt((double)(x-x1)*(x-x1)+(double)(y-y1)*(y-y1)));
        }
        printf("%.10lf\n",MA);
    }
    return 0;
}

E 炸鸡块君的高中回忆

  • 参考代码:
#include<bits/stdc++.h>
using namespace std;
#define mp make_pair
#define int long long 
#define re register int
#define pb emplace_back
#define lowbit(x) (x&-x)
#define fer(i,a,b) for(re i = a ; i <= b ; i ++)
#define der(i,a,b) for(re i = a ; i >= b ; i --)
#define snow ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int gcd(int a,int b){return b?gcd(b,a%b):a;}
int lcm(int a,int b){return a*b/gcd(a,b);}
typedef pair<int,int>PII;
typedef pair<int,string>PIS;
signed main(){
    int t;
    cin>>t;
    while(t--){
        int n,m;
        cin>>n>>m;
        if(m==1&&n==1){
            cout<<1<<endl;
            continue;
        }
        if(m==1&&n!=1){
            cout<<"-1"<<endl;
            continue;
        }
        int dai=m-1;
        int g=n-m;//除掉最后一次,需要带多少人。
        int x=(g+dai-1)/dai;
        cout<<x*2+1<<endl;
    }
    return 0;
}

J 朋友做游戏

  • 参考代码:
#include<bits/stdc++.h>
using namespace std;
#define mp make_pair
#define int long long 
#define re register int
#define pb emplace_back
#define lowbit(x) (x&-x)
#define fer(i,a,b) for(re i = a ; i <= b ; i ++)
#define der(i,a,b) for(re i = a ; i >= b ; i --)
#define snow ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int gcd(int a,int b){return b?gcd(b,a%b):a;}
int lcm(int a,int b){return a*b/gcd(a,b);}
typedef pair<int,int>PII;
typedef pair<int,string>PIS;
const int N=1e4+10;
int a[N],b[N];
bool cmp(int a,int b){
    return a>b;
}
signed main(){
    int t;
    cin>>t;
    while(t--){
        int x,y,n;
        cin>>x>>y>>n;
        for(int i=1;i<=x;i++)cin>>a[i];
        for(int i=1;i<=y;i++)cin>>b[i];
        sort(a+1,a+1+x,cmp);
        sort(b+1,b+1+y,cmp);
        for(int i=1;i<=x;i++)a[i]+=a[i-1];
        for(int i=1;i<=y;i++)b[i]+=b[i-1];
        int ans=-1;
        for(int i=1;i<=n;i++){
            if(i>=1&&i<=x&&n-i<=y&&i>=n-i){
                ans=max(ans,a[i]+b[n-i]);
            }
        }
        cout<<ans<<endl;
    }
    return 0;
}

H 牛牛看云

  • 二分参考代码:
#include<bits/stdc++.h>
using namespace std;
#define mp make_pair
#define int long long 
#define re register int
#define pb emplace_back
#define lowbit(x) (x&-x)
#define fer(i,a,b) for(re i = a ; i <= b ; i ++)
#define der(i,a,b) for(re i = a ; i >= b ; i --)
#define snow ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int gcd(int a,int b){return b?gcd(b,a%b):a;}
int lcm(int a,int b){return a*b/gcd(a,b);}
typedef pair<int,int>PII;
typedef pair<int,string>PIS;
const int N=1e6+10;
int a[N];
int s[N];
signed main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    sort(a+1,a+1+n);
    for(int i=1;i<=n;i++){
        s[i]=a[i]+s[i-1];
    }
    int res=0;
    for(int i=1;i<=n;i++){
        int x=1000-a[i];
        int l=i,r=n;
        while(l<r){
            int mid=l+r>>1;
            if(a[mid]>=x)r=mid;
            else l=mid+1;
        }
        int sum=l-i;
        if(l>i)
        res+=1000*sum-(s[l-1]-s[i-1]+(sum)*a[i]);
        int sum2=n-l+1;
        res+=(s[n]-s[l-1]+(sum2)*a[i])-sum2*1000;
    }
    cout<<res<<endl;
    return 0;
}
  • 映射+暴力参考代码:
#include<bits/stdc++.h>
using namespace std;
#define mp make_pair
#define int long long 
#define re register int
#define pb emplace_back
#define lowbit(x) (x&-x)
#define fer(i,a,b) for(re i = a ; i <= b ; i ++)
#define der(i,a,b) for(re i = a ; i >= b ; i --)
#define snow ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int gcd(int a,int b){return b?gcd(b,a%b):a;}
int lcm(int a,int b){return a*b/gcd(a,b);}
typedef pair<int,int>PII;
typedef pair<int,string>PIS;
const int N=1010;
int a[N];
signed main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){//映射
        int x;
        cin>>x;
        a[x]++;
    }
    int sum=0;
    for(int i=0;i<=1000;i++)//1e6暴力
        for(int j=i;j<=1000;j++){
            int dapei=0;
            if(i==j)dapei=a[i]+(a[i]*(a[i]-1))/2;
            else dapei=a[i]*a[j];
            sum+=dapei*abs(1000-(i+j));
        }
    cout<<sum<<endl;
    return 0;
}

F 中位数切分

  • 参考代码:
#include<bits/stdc++.h>
using namespace std;
#define mp make_pair
#define int long long 
#define re register int
#define pb emplace_back
#define lowbit(x) (x&-x)
#define fer(i,a,b) for(re i = a ; i <= b ; i ++)
#define der(i,a,b) for(re i = a ; i >= b ; i --)
#define snow ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int gcd(int a,int b){return b?gcd(b,a%b):a;}
int lcm(int a,int b){return a*b/gcd(a,b);}
typedef pair<int,int>PII;
typedef pair<int,string>PIS;
const int N=1e5+10;
int a[N];
signed main(){
    int t;
    cin>>t;
    while(t--){
        int n,m;
        cin>>n>>m;
        int sum=0;//统计>=m的数量
        for(int i=1;i<=n;i++){cin>>a[i];if(a[i]>=m)sum++;}
        if(n%2==0){
            if(sum<=n/2){cout<<"-1"<<endl;continue;}
        }
        else{
            int mid=(n+1)/2;
            if(sum<mid){
                cout<<"-1"<<endl;
                continue;
            }
        }
        int res=n;
        sum=n-sum;//现在的sum的小于m的数量
        if(sum)//如果至少一个小于m
        sum+=sum+1;//花费m+1个大于等于m的维护他
        res-=sum;//剩下单独成段
        if(sum)//如果至少有一个小于m的说明维护他的那个也算一段,否则没有维护的话不算单独一段。
        res++;
        cout<<res<<endl;
    }
    return 0;
}

C Baby’s first attempt on CPU

  • 参考代码:
#include<bits/stdc++.h>
using namespace std;
#define mp make_pair
#define int long long 
#define re register int
#define pb emplace_back
#define lowbit(x) (x&-x)
#define fer(i,a,b) for(re i = a ; i <= b ; i ++)
#define der(i,a,b) for(re i = a ; i >= b ; i --)
#define snow ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int gcd(int a,int b){return b?gcd(b,a%b):a;}
int lcm(int a,int b){return a*b/gcd(a,b);}
typedef pair<int,int>PII;
typedef pair<int,string>PIS;
const int N=110;
struct node{
    int a,b,c;
}nodes[N];
signed main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>nodes[i].a>>nodes[i].b>>nodes[i].c;
    }
    int res=0;
    for(int i=1;i<=n;i++){
            if(nodes[i].a==1){
                res+=3;
                nodes[i].a=nodes[i].b=nodes[i].c=0;
                nodes[i+1].b=nodes[i+1].c=0;
                nodes[i+2].c=0;
            }
            else if(nodes[i].b==1){
                res+=2;
                nodes[i].b=nodes[i].c=0;
                nodes[i+1].c=nodes[i+1].b=0;
                nodes[i+2].c=0;
            }
            else if(nodes[i].c==1){
                res+=1;
                nodes[i].c=0;
                if(nodes[i+1].b==1){
                    nodes[i+1].b=0;
                    nodes[i+1].c=1;
                }
                else if(nodes[i+1].c==1){
                    nodes[i+1].c=0;
                }
                nodes[i+2].c=0;
            }
    }
    cout<<res<<endl;
    return 0;
}

D 牛牛做数论

  • 参考代码:
#include<bits/stdc++.h>
using namespace std;
#define mp make_pair
#define int long long 
#define re register int
#define pb emplace_back
#define lowbit(x) (x&-x)
#define fer(i,a,b) for(re i = a ; i <= b ; i ++)
#define der(i,a,b) for(re i = a ; i >= b ; i --)
#define snow ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int gcd(int a,int b){return b?gcd(b,a%b):a;}
int lcm(int a,int b){return a*b/gcd(a,b);}
typedef pair<int,int>PII;
typedef pair<int,string>PIS;
int prime[15]={0,2,3,5,7,11,13,17,19,23,29};
int get_prime(int x){
    for(int i=2;i*i<=x;i++){
        if(x%i==0)return false;
    }
    return true;
}
signed main(){
    int t;
    cin>>t;
    while(t--){
        int n;
        cin>>n;
        if(n==1){
            cout<<"-1"<<endl;
            continue;
        }
        int l,r;
        int sum=1;
        for(int i=1;i<=10;i++){
            if(sum*prime[i]<=n)sum=sum*prime[i];
        }
        l=sum;
        for(int i=n;i>=1;i--){
            if(get_prime(i)){
                r=i;
                break;
            }
        }
        cout<<l<<' '<<r<<endl;
    }
    return 0;
}

A 九小时九个人九扇门

  • 参考代码:
#include<bits/stdc++.h>
using namespace std;
#define mp make_pair
#define int long long 
#define re register int
#define pb emplace_back
#define lowbit(x) (x&-x)
#define fer(i,a,b) for(re i = a ; i <= b ; i ++)
#define der(i,a,b) for(re i = a ; i >= b ; i --)
#define snow ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int gcd(int a,int b){return b?gcd(b,a%b):a;}
int lcm(int a,int b){return a*b/gcd(a,b);}
typedef pair<int,int>PII;
typedef pair<int,string>PIS;
const int N=1e5+10;
const int mod=998244353;
int a[N];
int f[N][10];
int get(int x){
    if(x%9==0)return 9;
    else return x%9;
}
signed main(){//DP
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        a[i]=get(a[i]);
    }
    f[0][0]=1;//注意入口,都不选的情况下也是一种方案。
    for(int i=1;i<=n;i++){
        for(int j=0;j<=9;j++){
            f[i][j]=(f[i][j]+f[i-1][j])%mod;
            int temp=get(j+a[i]);
            f[i][temp]=(f[i][temp]+f[i-1][j])%mod;
        }
    }
    for(int i=1;i<=9;i++)cout<<f[n][i]<<' ';
    cout<<endl;
    return 0;
}
举报

相关推荐

0 条评论