欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

Codeforces Round #222 (Div. 2)

程序员文章站 2022-06-08 11:14:51
...

A. Playing with Dice time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Two players are playing a game. First each of them writes an integer from 1 to 6, and then a dice is thrown.

A. Playing with Dice

time limit per test

1 second

memory limit per test

256 megabytes

input

standard input

output

standard output

Two players are playing a game. First each of them writes an integer from 1 to 6, and then a dice is thrown. The player whose written number got closer to the number on the dice wins. If both payers have the same difference, it's a draw.

The first player wrote number a, the second player wrote number b. How many ways to throw a dice are there, at which the first player wins, or there is a draw, or the second player wins?

Input

The single line contains two integers a and b (1?≤?a,?b?≤?6) — the numbers written on the paper by the first and second player, correspondingly.

Output

Print three integers: the number of ways to throw the dice at which the first player wins, the game ends with a draw or the second player wins, correspondingly.

Sample test(s)

input

2 5

output

3 0 3

input

2 4

output

2 1 3

Note

The dice is a standard cube-shaped six-sided object with each side containing a number from 1 to 6, and where all numbers on all sides are distinct.

You can assume that number a is closer to number x than number b, if |a?-?x|?|b?-?x|.

A题:a,bi两个数字,扔一个色字,求分别与a,b求差的绝对值,谁小就谁赢,相等平局,输出情况。

水:

#include 
#include 
#include 
#include 

int a, b;

int main() {
    int ans1 = 0, ans2 = 0, ans3 = 0;
    scanf("%d%d", &a, &b);
    for (int i = 1; i  abs(b - i)) ans3++;
    }
    printf("%d %d %d\n", ans1, ans2, ans3);
    return 0;
}

B题:随即1-k表示半决赛前k名直接晋级,剩下的人按时间排,贪心。
#include 
#include 
const int N = 100005;
int n, a[N], b[N];
int an[N], bn[N];

void init() {
    scanf("%d", &n);
    memset(an, 0, sizeof(an));
    memset(bn, 0, sizeof(bn));
    for (int i = 0; i 
C题:给定k步,要求填到只剩一块连接的空白。搜索题
#include 
#include 
#include 
#define max(a,b) (a)>(b)?(a):(b)
#define min(a,b) (a) b.v;
}

void init() {
    sum = 0; Max = 0; snum = 0;
    memset(p, 0, sizeof(p));
    scanf("%d%d%d", &n, &m, &k);
    for (int i = 0; i = 0 && xx = 0 && yy = 0 && xx = 0 && yy 
D题:m个bug每个bug有级别,n个人,每个人有级别和需求,现在总共有s个需求,求最少天数完成的方法,并且输出方案。

思路:二分+贪心+优先队列优化

#include 
#include 
#include 
#include 
using namespace std;

const int N = 100005;

int n, m, s, a[N], ans[N];

struct S {
    int b, c, id;
    friend bool operator  b.c;
    }
} st[N];

struct B {
    int a, id;
} bd[N];

int cmp(S a, S b) {
    return a.b > b.b;
}

int cmp1(B a, B b) {
    return a.a Q;
    for (int i = m - 1; i >= 0; i -= time) {
        while (st[sn].b >= bd[i].a && sn != n) {Q.push(st[sn++]);}
        if (Q.empty()) return false;
        S t = Q.top(); Q.pop();
        if (ss = e; j--) {
            ans[bd[j].id] = t.id;
        }
    }
    return true;
}

bool judge(int time) {
    int ss = s, sn = 0;
    priority_queueQ;
    for (int i = m - 1; i >= 0; i -= time) {
        while (st[sn].b >= bd[i].a && sn != n) {Q.push(st[sn++]);}
        if (Q.empty()) return false;
        S t = Q.top(); Q.pop();
        if (ss 

E题:dota2 进行 bp操作,每个英雄有一个能力值,玩家1,2分别进行b,p操作,每个玩家都尽量往好了取,要求最后能力值的差,

思路:dp+贪心+位运算,对于一个玩家进行pick时,肯定选能力值最大的,这是贪心。进行ban时。要把所有情况找出来。用dp的记忆化搜索。对于状态利用2进制的位运算。

代码:

#include 
#include 
#include 
#define min(a,b) (a)(b)?(a):(b)
using namespace std;

const int INF = 0x3f3f3f3f;
const int MAXN = 1111111;
const int N = 105;
const int M = 25;

int cmp(int a, int b) {
    return a > b;
}

int n, m, s[N], c[M], t[M], dp[MAXN], st;

void init() {
    memset(dp, INF, sizeof(dp));
    scanf("%d", &n);
    for (int i = 0; i