马蹄集 oj赛(第十一次)

目录

除法2

tax

约数个数

约数之和

全部相同

石头剪刀布

模数

余数之和

数树

除法


除法2


黄金时间限制:1秒占用内存: 128 M难度:
给定n,求 ”i*[n/],[] 表示对  取下整
格式
一个正整数n。输入格式:
输出格式:一个数表示答案
样例1
输入:4
输出:15
 

//
// Created by abner on 2023/9/13.
//
#include <bits/stdc++.h>
using namespace std;
#define int long long
int n,ans;
signed main(){
    cin >>n;
    for (int l = 1,r;l <= n;l =r+1) {
        r = n / (n / l);
        ans += (r - l + 1) * (n / l) * (l + r) / 2;
    }
            cout <<ans;
    return 0;
}

tax


难度:钻石四占用内存:128M时间限制: 1秒
小码哥要交税,交的税钱是收入 n 的最大因子(该最大因子为不等于  的最大因子),但是现在小码哥为了避税,把钱拆成几份(每份至少为2),使交税最少,输出税钱。
格式
输入格式:一个正整数n表示所有的钱数
输出格式:输出一个正整数,表示税钱。
样例1
输入:4
输出:2

//
// Created by abner on 2023/9/13.
//
#include <bits/stdc++.h>
using namespace std;
int n;
bool prime(int num) {
    for (int i = 2; i * i <= num; i++) {
        if (num % i == 0)
            return false;
    }
    return true;
}
        int main(){
            cin >>n;
            if (prime(n))
                cout <<1;
            else if (n%2 == 0)
            cout <<2;
            else if(prime(n-2))
            cout <<2;
            else
            cout <<3;
            return 0;
        }

约数个数


难度: 黄金时间限制: 1秒四占用内存:128M
给出给定正整数n,求n的约数个数
格式
输入格式:一个整数n。
输出格式:输出一行一个整数表示答案
样例1
输入:12
输出:6

//
// Created by abner on 2023/9/13.
//
#include <bits/stdc++.h>
using namespace std;
//int main(){
//    int n;
//    cin >>n;
//    int ans =0;
//    for (int i = 1;i*i<=n;i++) {
//        if (n % 1 == 0)
//            ans += 2;
//        if (i * i == n)
//            ans--;
//    }
//        cout << ans;
//        return 0;
//    }
int main(){
    int n;
    cin >>n;
    int ans = 1;
    for (int i=2;i*i<=n;i++){
        int tmp =0;
        while(n % i == 0)
        tmp++,n /= i;
        ans *= (tmp+1);
    }
    if(n!=1)
        ans *= 2;
    cout <<ans;
    return 0;
}

约数之和


难度:黄金时间限制: 1秒四占用内存:128M
给出给定正整数n,求n的约数之和。
格式
输入格式:一个整数n。
输出格式:输出一行一个整数表示答案。
样例1
输入:12
输出:28

//
// Created by abner on 2023/9/13.
//
#include <bits/stdc++.h>
using namespace std;
int main(){
    int n;
    cin >>n;
    int ans = 1;
    for (int i=2;i*i<=n;i++){
        int tmp = i;
        while (n %i==0)
            tmp *=i,n /=i;
        ans*=(tmp-1)/(i-1);
    }
    if(n!=1)
    ans*=(n+1);
    cout << ans;
    return 0;
}

全部相同


难度:黄金时间限制: 1秒四占用内存:128M
小码哥有一个 n 个整数组成的数组 a1,a2,...,an 。小码哥可以任取一个正整数 k 进行下面的操作:从数列中取一个数 ai,将它的值减去  。小码哥进行了若次(可能是次)上面的操作后,数列中所有的数都相等了。请你找到 k 可能的最大值。
格式
输入格式:多组输入,第一行包含一个整数 t(1<t 104),代表测试样例组数;下面 2t 行,每2行一组,每组第一行为数列的长度n(4<n<40); 第二行n 个整数 a1,a2,...,an (-10 < ai<10 )。
输出格式:对于每组输入输出一行 的最大值 (如果 可以任意大,输出-1)。

//
// Created by abner on 2023/9/13.
//
#include <bits/stdc++.h>
using namespace std;
int t,n,a[47];
int gcd(int a,int b){return b ==0 ? a : gcd(b,a%b);}
int main(){
    cin >>t;
    while (t--) {
        cin >> n;
        for (int i = 0; i < n; i++)
            cin >> a[i];
//        void std::sort(_RAIter,_RAIter)
        sort(a, a + n);
        for (int i = 1; i < n; i++)
            a[i] -= a[0];
        if (a[n - 1] == 0) {
            cout << -1 << endl;
            break;
        }
        int ans = gcd(a[1], a[2]);
        for (int i = 3; i < n; i++)
            ans = gcd(ans, a[i]);
        cout << ans << endl;
    }
    return 0;
}

石头剪刀布


难度:黄金时间限制:1秒占用内存: 128 M
每个人都会按照一个周期出石头,剪刀有两个人在玩石头剪刀布游戏: R-石头 P-布 S-剪刀,双方各输了多少次。或布。 周期肯定在1099以内 (包括109)问玩 n 把后,
格式
输入格式: 输入第一行一个n (1<n<2*109),n为玩了几把;第2行为第一个人的周期规律
第3行为第二个人的周期规律.
输出格式:输出共2个数:第一个人输的次数和第二个人输的次数
样1
输入:7
 

//
// Created by abner on 2023/9/13.
//
#include <bits/stdc++.h>
using namespace std;
int n,loseS,loseT;
string s,t;
int gcd(int a,int b){return b ==0 ? a : gcd(b,a % b);}
int lcm(int a,int b){return a * b/gcd(a,b);}
void iswin(int a,int b){
    if (s[a]=='R'&&t[b]=='S')
    loseT++;
    if(s[a]=='S'&&t[b]=='R')
        loseS++;
    if(s[a]=='S'&&t[b]=='P')
        loseT++;
    if(s[a]== 'P'&&t[b]=='S')
    loseS++;
    if (s[a]=='P'&&t[b]=='R')
        loseT++;
    if (s[a]=='R'&&t[b]=='P')
        loseS++;
}
    int main() {
        cin >> n >> s >> t;
        int lens = s.length(), lent = t.length();
        int cycle = lcm(lens, lent);
        for (int i = 0; i < cycle; i++)
            iswin(i % lens, i % lent);
        loseS *= n / cycle, loseT *= n / cycle;
        for (int i = 0; i < n % cycle;i++)
        iswin(i % lens, i % lent);
        cout << loseS<<' ' << loseT <<endl;
        return 0;
    }

模数


难度:黄金时间限制: 1秒巴占用内存:128M
现在小码哥给定两个整数 a,b,问有多少个 2 ,使得满足等式a mod a =b,如果存在无限个,就输出“infinity”,否则输出满足条件2的个数。
格式
输入格式:两个数a,
输出格式:输出个数或“infinity”
样例1
输入:21 5
输出:2

//
// Created by abner on 2023/9/13.
//
#include <bits/stdc++.h>
using namespace std;
int a,b,ans;
int main() {
    cin >> a >> b;
    if (a == b) {
        cout << "infinity" << endl;
        return 0;
    }
    if (a < b) {
        cout << 0 << endl;
        return 0;
    }
    a -= b;
    for (int i = 1; i * i <= a; i++) {
        if (a % i == 0) {
            if (i > b)
                ans++;
            if (a / i > b && a / i != i)
                ans++;
        }
    }
    cout << ans << endl;
    return 0;
}

余数之和


难度:黄金时间限制: 1秒四占用内存:128M
你上次很轻松的解决了小码哥的问题,这让小码哥觉得很没面子,于是他又想了一个更加复杂的问题来考你。
小码哥给你两个正整数n和f,计算judge(n,f)=f % 1+ f % 2+ f %3 + .. + f %n的值,其中f % i表示f除以i的余数。
格式
输入格式:输入仅一行,包含两个正整数 nf
输出格式: 输出仅一行,即 judge(n,f)

//
// Created by abner on 2023/9/13.
//
#include <bits/stdc++.h>
using namespace std;
#define int long long
int n,f,ans,temp;
signed main(){
    cin >>n >>f;
    if (n>f){
        temp = (n - f)* f;
        n = f;
    }
    for(int l=1,r;l<=n;l=r+1){
                r=min(f/(f/l),n);//这里其实蕴含了n<f的处理情况
    ans+=(r-l+1)*(f/l)*(l+r)/2;
}
cout <<n * f - ans + temp;
return 0;
}

数树


难度:黄金时间限制: 1秒四占用内存:128 M
在卡兹戴尔有一片很奇怪的森林,在一个直角坐标系内的(a,)坐标值都为自然数的坐标上都有颗树,如果一棵树的坐标 (a,) 与原点(0,0) 的连线中没有通过其他任何树,则称该树在原点处是可见的。
例如,树 (4.2)就是不可见的,因为它与原点的连线会通过树 (21)。部分可见点与原点的连线如下图所示,如图是一个 4 x 4 的树林

//
// Created by abner on 2023/9/13.
//
#include <bits/stdc++.h>
using namespace std;
int c,n;
int gcd(int a,int b){return b ==0 ? a :gcd(b,a % b);}
int main(){
    cin >>c;
    for (int i=1;i<=c;i++){
        cin >>n;
    int ans =0;
    for (int j=1;j <= n;j++)
        for(int k=1;k<=n;k++)
    if(gcd(j,k)== 1)
    ans++;
    cout <<i<<" "<<n <<" "<<ans + 2 <<endl;
}
return 0;
}

除法


难度:黄金时间限制:1秒占用内存: 28 M
给定几,求”in/i, 2表示对 a 取下整
格式
输入格式:一个正整数n。
输出格式:一个数表示答案
样例 1
输入:4
输出:8

//
// Created by abner on 2023/9/13.
//
#include <bits/stdc++.h>
using namespace std;
#define int long long
int n,ans;
signed main(){
    cin >>n;
    for (int l=1,r;l <= n;l=r+1) {
        r = n / (n / l);
        ans += (r - l + 1) * (n / l);
    }
        cout <<ans;
    return 0;
}

 如果 ChatGPT 停机或正在维护,可能会出现多个错误、故障或漏洞,包括请求过多。所以,去检查服务器状态是否正常。只需访问页面 并查看 OpenAI 的状态。绿色条表示状态是完全可操作的。如果您看到红色、橙色或浅绿色线条,则说明发生了中断,您只需等待 ChatGPT 团队修复即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值