Educational Codeforces Round 77 (Rated for Div. 2)A~C[数学场]

A. Heating
在这里插入图片描述

题目大意:就是给你一个数n把它分成k份始得每一份的平方和最小;

思路:1.如果k足够大那么将n分成n个1平方和为n是最小的

2.如果k < n,我们还是从第一点出发,先将n拆成n个1,然后再平均分配给k个位置

#include <iostream>
#include <cstdio>
#include <stack>
#include <vector>
#include <map>
#include <cstring>
#include <deque>
#include <queue>
#include <algorithm>
#define MEM(a,al) memset(a,al,sizeof(a))
#define sfx(x) scanf("%lf",&x)
#define sfxy(x,y) scanf("%lf%lf",&x,&y)
#define sdx(x) scanf("%d",&x)
#define sdxy(x,y) scanf("%d%d",&x,&y)
#define pfx(x) printf("%.0f\n",x)
#define pfxy(x,y) printf("%.6f %.6f\n",x,y)
#define pdx(x) printf("%d\n",x)
#define pdxy(x,y) printf("%d %d\n",x,y)
#define getArray(a,len) for(int ia = 0; ia < len; ia++) scanf("%d",&a[ia])
#define printArray(a,len) for(int ia = 0; ia < len; ia++) printf("%d%c",a[ia],(ia==len-1)?'\n':' ')
#define fora(i,n) for(i = 0; i < n; i++)
#define fora1(i,n) for(i = 1; i <= n; i++)
#define foraf(i,n) for(int i = 0; i < n; i++)
#define foraf1(i,n) for(int i = 1; i <= n; i++)
#define ford(i,n) for(i = n-1; i >= 0; i--)
#define ford1(i,n) for(i = n; i > 0; i--)
#define fordf(i,n) for(int i = n-1; i >= 0; i--)
#define fordf1(i,n) for(int i = n; i > 0; i--)
#define IOS std::ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define INF 0x3f3f3f3f
#define hash Hash
#define f first
#define s second
using namespace std;
const int N = 5e5 + 10;
typedef pair<int,int> PII;
typedef long long LL;
char a[N], Ma[N * 2];
int T, hash[N], ne[26], Mp[N * 2];

int main()
{
    IOS;
    int T;
    cin >> T;
    while(T --)
    {
        int c, s;
        LL ans = 0;
        cin >> c >> s;
        if(s < c) cout << s << endl;
        else 
        {
            int eps = s / c;
            int mod = s % c;
            for(int i = 1; i <= c - mod; ++ i)
              ans += 1ll * eps * eps;
            for(int i = 1; i <= mod; ++ i)
              ans += 1ll * (eps + 1) * (eps + 1);
            cout << ans << endl;
        }
    }
    return 0;
}

B. Obtain Two Zeroes
在这里插入图片描述

题意:你被给予两个数a和b,你可以对这两个数进行操作 每次操作你可以选择任意的正整数x,可以进行a = a - x,b = b - 2x或者a = a - 2x,b = b - x两种操作 是否可以让两个整数同时变为0

假设a = x1 + x2 + … +xm + y1 + y2 + … yn;

那么b = 2*(x1 + x2 + x3 + … + xm) + (1 / 2) *(y1 + y2 + … + yn);

将b * 2 - a 的 (2*b - a) = (3的倍数) ;

所以这道题就出来了

#include <iostream>
#include <cstdio>
#include <stack>
#include <vector>
#include <map>
#include <cstring>
#include <deque>
#include <queue>
#include <algorithm>
#define MEM(a,al) memset(a,al,sizeof(a))
#define sfx(x) scanf("%lf",&x)
#define sfxy(x,y) scanf("%lf%lf",&x,&y)
#define sdx(x) scanf("%d",&x)
#define sdxy(x,y) scanf("%d%d",&x,&y)
#define pfx(x) printf("%.0f\n",x)
#define pfxy(x,y) printf("%.6f %.6f\n",x,y)
#define pdx(x) printf("%d\n",x)
#define pdxy(x,y) printf("%d %d\n",x,y)
#define getArray(a,len) for(int ia = 0; ia < len; ia++) scanf("%d",&a[ia])
#define printArray(a,len) for(int ia = 0; ia < len; ia++) printf("%d%c",a[ia],(ia==len-1)?'\n':' ')
#define fora(i,n) for(i = 0; i < n; i++)
#define fora1(i,n) for(i = 1; i <= n; i++)
#define foraf(i,n) for(int i = 0; i < n; i++)
#define foraf1(i,n) for(int i = 1; i <= n; i++)
#define ford(i,n) for(i = n-1; i >= 0; i--)
#define ford1(i,n) for(i = n; i > 0; i--)
#define fordf(i,n) for(int i = n-1; i >= 0; i--)
#define fordf1(i,n) for(int i = n; i > 0; i--)
#define IOS std::ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define INF 0x3f3f3f3f
#define hash Hash
#define f first
#define s second
using namespace std;
const int N = 5e5 + 10;
typedef pair<int,int> PII;
typedef long long LL;
char a[N], Ma[N * 2];
int T, hash[N], ne[26], Mp[N * 2];

int main()
{
    IOS;
    int T;
    cin >> T;
    while(T --)
    {
        int c, s;
        LL ans = 0;
        cin >> c >> s;
       if(c > s) swap(c,s);
      if((2*c-s) % 3 == 0 && (2 * c >= s)) puts("YES");
      else puts("NO");
    }
    return 0;
}

C. Infinite Fence
在这里插入图片描述

现有10^100块木板需要涂漆,第x块如果是x是a的倍数,则涂一种颜色,是b的倍数,则涂另一种颜色。如果既是a又是b的倍数,那么两种颜色都可以涂;如果连续有k块板的颜色是一样的,则会被处死,问是否能避免被处死。

思路很简单:假设a>b,如果有连续的k块b在[ay~a(y+1)]之间一定会死

假设在ay 这个位置涂red那么在ay + q上涂blue那么我们要求出q的最小值再去看一下间隔最大可以涂多少个blue,那么ay + q mod b == 0那么转化为方程就是(ay + q) = kx;

由裴蜀定理得

ay - kb = q这个方程最小值就是q = gcd(a,b);

那么max = (a - q - 1) / b + 1

#include <iostream>
#include <cstdio>
#include <stack>
#include <vector>
#include <map>
#include <cstring>
#include <deque>
#include <queue>
#include <algorithm>
#define MEM(a,al) memset(a,al,sizeof(a))
#define sfx(x) scanf("%lf",&x)
#define sfxy(x,y) scanf("%lf%lf",&x,&y)
#define sdx(x) scanf("%d",&x)
#define sdxy(x,y) scanf("%d%d",&x,&y)
#define pfx(x) printf("%.0f\n",x)
#define pfxy(x,y) printf("%.6f %.6f\n",x,y)
#define pdx(x) printf("%d\n",x)
#define pdxy(x,y) printf("%d %d\n",x,y)
#define getArray(a,len) for(int ia = 0; ia < len; ia++) scanf("%d",&a[ia])
#define printArray(a,len) for(int ia = 0; ia < len; ia++) printf("%d%c",a[ia],(ia==len-1)?'\n':' ')
#define fora(i,n) for(i = 0; i < n; i++)
#define fora1(i,n) for(i = 1; i <= n; i++)
#define foraf(i,n) for(int i = 0; i < n; i++)
#define foraf1(i,n) for(int i = 1; i <= n; i++)
#define ford(i,n) for(i = n-1; i >= 0; i--)
#define ford1(i,n) for(i = n; i > 0; i--)
#define fordf(i,n) for(int i = n-1; i >= 0; i--)
#define fordf1(i,n) for(int i = n; i > 0; i--)
#define IOS std::ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define INF 0x3f3f3f3f
#define hash Hash
#define f first
#define s second
using namespace std;
const int N = 5e5 + 10;
typedef pair<int,int> PII;
typedef long long LL;
char a[N], Ma[N * 2];
int T, hash[N], ne[26], Mp[N * 2];

int main()
{
    IOS;
    int T;
    cin >> T;
    while(T --)
    {
        LL r, b, k;
        cin >> r >> b >> k;
        if(b < r) swap(r,b);
        LL cl = b - __gcd(r,b) - 1;
        LL x = 1 + cl / r;
        if(x < k) puts("OBEY");
        else puts("REBEL");
    }
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
"educational codeforces round 103 (rated for div. 2)"是一个Codeforces平台上的教育性比赛,专为2级选手设计评级。以下是有关该比赛的回答。 "educational codeforces round 103 (rated for div. 2)"是一Codeforces平台上的教育性比赛。Codeforces是一个为程序员提供竞赛和评级的在线平台。这比赛是专为2级选手设计的,这意味着它适合那些在算法数据结构方面已经积累了一定经验的选手参与。 与其他Codeforces比赛一样,这比赛将由多个问题组成,选手需要根据给定的问题描述和测试用例,编写程序来解决这些问题。比赛的时限通常有两到三个小时,选手需要在规定的时间内提交他们的解答。他们的程序将在Codeforces的在线评测系统上运行,并根据程序的正确性和效率进行评分。 该比赛被称为"educational",意味着比赛的目的是教育性的,而不是针对专业的竞争性。这种教育性比赛为选手提供了一个学习和提高他们编程技能的机会。即使选手没有在比赛中获得很高的排名,他们也可以从其他选手的解决方案中学习,并通过参与讨论获得更多的知识。 参加"educational codeforces round 103 (rated for div. 2)"对于2级选手来说是很有意义的。他们可以通过解决难度适中的问题来测试和巩固他们的算法和编程技巧。另外,这种比赛对于提高解决问题能力,锻炼思维和提高团队合作能力也是非常有帮助的。 总的来说,"educational codeforces round 103 (rated for div. 2)"是一为2级选手设计的教育性比赛,旨在提高他们的编程技能和算法能力。参与这样的比赛可以为选手提供学习和进步的机会,同时也促进了编程社区的交流与合作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值