9/21 越努力越幸运-思维赛(4.0)

本文解析了多个CodeForces竞赛题目,包括优化咖啡工作流程、ACM队伍组建、棋盘攻击模式、数组平衡点及2048合成挑战等,通过算法与数据结构展现了解题思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

F.CodeForces - 1118D1

题意:有n杯咖啡,需要写m页作业;他每天可以喝 不限量 杯 咖啡(1或者多杯);每杯咖啡可以让他写ai页作业;在同一天里,他所喝的咖啡能让他写w页;

w=(第一杯+第二杯-1+第三杯-2……);求最少喝几天能写完作业(这题意好像描述的不是很多,凑合~语文不好)

解:排序+二分答案,下限1天,上限n天,check的话直接看码;

O(nlogn)

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN=1e5+10;
int a[MAXN];
int n,m;
bool check(int mid){
    int ans=0;
    int i=1;
    int cnt=0;
    int k=mid;
    while(i<=n){
        for(;i<=min(k,n);i++){
            ans+=max(a[i]-cnt,0);
        }
        if(ans>=m)return true;
        k=k+=mid;
        cnt++;
    }
    return false;
}
bool cmp(int x,int y){
    return x>y;
}
int main(){
    ios::sync_with_stdio(false);
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    sort(a+1,a+1+n,cmp);
    int ans=-1;
    int l=1,r=n,mid;
    while(l<=r){
        mid=(l+r)>>1;
        if(check(mid)){
            r=mid-1;
            ans=mid;
        }
        else l=mid+1;
    }
    cout<<ans<<endl;


    return 0;
}
View Code

E.CodeForces - 1221C

题意:acm组队,有a个代码手,b个数论king,c个闲人;

求最多能组多少队,每队至少要有1个代码手和一个数论king;

解:模拟?;easy

#include <bits/stdc++.h>
using namespace std;
const int MAXN=1e5+10;
typedef long long ll;
int main(){
    ios::sync_with_stdio(false);
    int T;
    cin>>T;
    while(T--){
        ll a,b,c,minn;
        cin>>a>>b>>c;
        minn=min(a,min(b,c));
        if(minn!=c){
            cout<<minn<<endl;
        }
        else{
            a-=c;b-=c;
            cout<<minn+min(a,min(b,(a+b)/3))<<endl;
        }
    }



    return 0;
}
View Code

D.CodeForces - 1221B

题意:给一个n,输出一个图(只含有W,B),使得每个W或B能攻击B或W的个数最多;

每个只能攻击日字对角线上的;W攻击B,B攻击W;

解:交叉输出BW就行了;

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN=2e5+10;
int main(){
    ios::sync_with_stdio(false);
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            if(i%2==j%2)cout<<'B';
            else cout<<'W';
        }
        cout<<endl;
    }


    return 0;
}
View Code

C.CodeForces - 1118B 

题意:n个数,求去掉一个数,使得剩下数组中奇数项和 等于 偶数项和 的个数;

解:先求出不去掉的奇数项和 和 偶数项和;

然后遍历数组;i代表去掉第i个数    然后

奇数项和=(i之前的奇数项和+i之后的偶数项和)

偶数项和=(i之前的偶数项和+i之后的奇数项和)

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN=2e5+10;
int a[MAXN];
int main(){
    ios::sync_with_stdio(false);
    int n;
    cin>>n;
    int sum1=0;
    int sum2=0;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        if(i%2)sum1+=a[i];
        else sum2+=a[i];
    }
    //cout<<"sum1="<<sum1<<' '<<"sum2="<<sum2<<endl;
    int ans=0;
    int newsum1=0;
    int newsum2=0;
    for(int i=1;i<=n;i++){
        if(i%2){
            sum1-=a[i];
            if(sum1+newsum2==sum2+newsum1)ans++;
            newsum1+=a[i];
        }
        else {
            sum2-=a[i];
            if(sum1+newsum2==sum2+newsum1)ans++;
            newsum2+=a[i];
        }
    }
    cout<<ans<<endl;


    return 0;
}
View Code

B.CodeForces - 1221A

题意:给你n个数,每两个一样的数可以合并成这个数的两倍,问能否合成2048;

2048游戏~;

解:桶排序;把小于等于2048的数进行桶排序,大于2048就不可能合成了;

然后从1开始遍历到2048(1024即可),num[i]>=2?num[i*2]+=num[i]/2:continue;

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN=1e3+10;
int a[MAXN];
int num[3000];
int main(){
    ios::sync_with_stdio(false);
    int T,n;
    cin>>T;
    while(T--){
        cin>>n;
        memset(num,0,sizeof(num));
        for(int i=1;i<=n;i++){
            cin>>a[i];
            if(a[i]<=2048){
                num[a[i]]++;
            }
        }
        for(int i=1;i<=2048;i++){
            if(num[i]>=2){
                num[i*2]+=num[i]/2;
            }
        }
        if(num[2048])cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
    }


    return 0;
}
View Code

A.CodeForces - 1118A

题意:两种水瓶,1L a元,2L b元,问需要n L水最少需要花费多少;

解:直接比较1L和2L 的性价比,然后照着买;

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,a,b;

int main(){
    ios::sync_with_stdio(false);
    int T;
    cin>>T;
    while(T--){
        cin>>n>>a>>b;
        if(a*2<=b){
            cout<<n*a<<endl;
        }
        else{
            ll ans=0;
            ans+=n/2*b;
            if(n%2){
                ans+=a;
            }
            cout<<ans<<endl;
        }
    }


    return 0;
}
View Code

 

转载于:https://www.cnblogs.com/lin1874/p/11564880.html

<think>嗯,用户遇到了一个错误,执行ssh-copy-id命令时提示找不到&#39;10.253.235.2.pub&#39;文件。我需要先理解这个问题的原因。 首先,ssh-copy-id命令的作用是将本地的公钥复制到远程主机的authorized_keys文件中,这样以后就可以免密登录了。命令的基本格式应该是ssh-copy-id -i 公钥文件 用户名@远程主机,或者直接远程主机IP。用户在这里输入的却是ssh-copy-id -i 10.253.235.2,看起来是把IP地址当成了公钥文件参数。 因为-i选项后面应该跟的是公钥文件的路径,比如~/.ssh/id_rsa.pub,而用户直接用了IP地址,所以系统会尝试寻找名为10.253.235.2.pub的文件,自然找不到,导致报错。 接下来,我需要确认用户可能的意图。用户可能是想将公钥复制到10.253.235.2这个远程主机,但错误地省略了用户名和主机之间的格式,或者混淆了选项的位置。正确的命令应该包括用户和主机,比如user@10.253.235.2,并且如果使用-i指定公钥文件,需要确保该文件存在。 另外,用户可能没有生成过SSH密钥对,或者公钥文件的默认位置不存在。这时候需要检查是否存在~/.ssh/id_rsa.pub文件,如果不存在,需要用ssh-keygen生成。或者,用户可能指定了自定义的公钥文件,但路径不正确。 解决方案方面,应该分步骤指导用户:首先确认公钥是否存在,如果不存在就生成;然后正确使用ssh-copy-id命令,包括指定正确的公钥文件和目标主机的用户名及IP。可能还需要提醒用户注意命令格式,避免将IP地址误作为文件参数。 需要确保回答清晰,步骤明确,避免使用过于专业的术语,让用户容易理解和操作。同时,检查是否有其他可能的错误原因,比如权限问题,但根据当前错误信息,主要问题还是路径错误,所以先解决这个。</think>您遇到的错误是因为 `ssh-copy-id` 命令的参数使用有误。以下是问题分析和解决方法: --- ### **错误原因** `-i` 参数用于指定本地公钥文件的路径(例如 `~/.ssh/id_rsa.pub`),但您直接将 `10.253.235.2`(远程主机IP)作为参数输入,导致系统误以为这是一个公钥文件路径,从而报错找不到文件。 --- ### **正确用法** #### 1. **生成SSH密钥对**(如果尚未生成) 如果本地没有公钥文件 `~/.ssh/id_rsa.pub`,需先生成密钥对: ```bash ssh-keygen -t rsa -b 4096 ``` 直接按回车接受默认路径和空密码即可。 --- #### 2. **使用 `ssh-copy-id` 的正确命令格式** 将公钥复制到远程主机 `10.253.235.2`,需指定以下内容: ```bash ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.253.235.2 ``` - `-i ~/.ssh/id_rsa.pub`:指定本地公钥文件路径(默认路径可省略 `-i` 参数) - `root@10.253.235.2`:目标主机的用户名和IP(如果非root用户,替换为实际用户名) --- #### 3. **其他可能场景** - **如果使用自定义公钥文件**(例如 `my_key.pub`): ```bash ssh-copy-id -i /path/to/my_key.pub username@10.253.235.2 ``` - **如果远程主机的SSH端口非默认22**: ```bash ssh-copy-id -i ~/.ssh/id_rsa.pub -p 2222 username@10.253.235.2 ``` --- ### **常见问题** 1. **权限问题** 确保本地 `.ssh` 目录权限为 `700`,公钥文件权限为 `644`: ```bash chmod 700 ~/.ssh chmod 644 ~/.ssh/id_rsa.pub ``` 2. **首次连接需确认主机指纹** 首次连接时会提示确认远程主机指纹,输入 `yes` 即可。 --- ### **验证是否成功** 尝试免密登录远程主机: ```bash ssh root@10.253.235.2 ``` 若无需输入密码,则配置成功。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值