cf #379div2

A.

题意:输入一串字符只含A和D,判断A和D的多少比较,

分析:直接计数

B.

题意:给出数字2,3,5,6的个数,用这些数组成256和32,要求最后组成的数的和最大

分析:贪心,优先组成256,然后组成32,  

C.

题意:要求你制作出n瓶药水,初始每瓶药水要花费x的时间,另有两种魔法操作可以缩短制作时间,type1 :将制作每一瓶药水的时间都缩短至ai的时间,但是要花费bi的魔法点数;type2:瞬间制作出ci瓶药水(相当这ci瓶药水没花时间),但是要花费di的魔法点数。初始你有s的魔法点数,type1有m种魔法,type2有k种魔法。要求出制作出n瓶药水的最短时间

(1?≤?n?≤?2·1e9,?1?≤?m,?k?≤?2·1e5)

分析:1.首先,我们发现如果我们选择第一种type的第i个魔法和第二种type的第j个魔法,则我们准备所有的药水要花费 的时间,我们要使这个值最小;

2.第二种类型魔法可以制作出的药水数及花费的魔法点数是非递减序列,考虑用二分;

3.直接循环一遍type1的魔法(a[i]数组),然后用剩下的魔法点数s1找到能使用的type2的魔法的最大值(二分)

4.注意边界,可能初始的魔法点数既不可能选择type1 也不能选择type2 ,此时答案直接是初始的x*n;

代码:

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstdio>
 4 using namespace std;
 5
 6 #define maxn 200010
 7 #define ll long long
 8 #define fi first
 9 #define se second
10 ll a[maxn],b[maxn],c[maxn],d[maxn];
11 ll n,m,k,x,s;
12
13 ll get(ll mon)
14 {
15     ll l=0,r=k;
16     while(l<r)
17     {
18         ll mid=(l+r+1)/2;
19         if(d[mid]>mon)
20             r=mid-1;
21         else
22             l=mid;
23     }
24     return c[l];
25 }
26 int main()
27 {
28
29     cin>>n>>m>>k;
30     cin>>x>>s;
31     ll ans=n*x;
32     a[0]=x;  //type1没有选中的spell时注意初始化
33     for(ll i=1;i<=m;i++) cin>>a[i];
34     for(ll i=1;i<=m;i++) cin>>b[i];
35     for(ll i=1;i<=k;i++) cin>>c[i];
36     for(ll i=1;i<=k;i++) cin>>d[i];
37     for(int i=0;i<=m;i++) //i要从0开始,因为tyoe1可能也没有可以使用的pell
38     {
39         ll s1=s-b[i];
40         //cout<<s1<<"  "<<get(s1)<<" "<<(n-get(s1))*a[i]<<endl;
41         if(s1<0)continue;
42         ans=min(ans,(n-get(s1))*a[i]);
43     }
44     cout<<ans<<endl;
45     return 0;
46 }

D.

题意:-1e9~1e9的棋盘,给出黑king的位置,和n个白棋的位置白棋只能是象,车,王后;问白棋是否能在一步之内攻击到黑king。

Bishop象:只能走对角线任意格但不能跳过障碍;

Rook车:只能走水平和垂直但不能跳过障碍;

Queen王后:可以走对角线和水平和垂直,也不能跳过障碍;

分析:以黑king为分析对象,一步之内要攻击到黑king只有上下左右及上左上右下左下右八个方向上离黑king最近的白棋(因为白棋都不能跳过挡道棋子),即可在输入时更新每个方向上离黑king最近的白棋,最后根据每种白棋能走的方向判断能否攻击到黑king。

代码://自己容易手挫版

#include<iostream>
#include<cstdio>
#include<cmath>
#include<string>
#include<cstring>
using namespace std;

#define ll long long
#define fi first
#define se second
pair<ll,ll>p[10];
int flag[10];
char cr[10];
ll xx;
ll yy;

int judge(char c,ll x,ll y)
{
    if(x==xx)
    {
        if(y<yy)
        {
            if(!flag[1])
            {
                flag[1]=1;
                p[1].se=y;p[1].fi=xx;cr[1]=c;
            }
            p[1].se=max(p[1].se,y);
            if(p[1].se==y) cr[1]=c;
        }
        else
        {
            if(!flag[5])
            {
                flag[5]=1;
                p[5].se=y;p[5].fi=xx;cr[5]=c;
            }
            p[5].se=min(p[5].se,y);
            if(p[5].se==y) cr[5]=c;
        }
    }
    else if(y==yy)
    {
        if(x<xx)
        {
            if(!flag[3])
            {
                flag[3]=1;
                p[3].fi=x;p[3].se=yy;cr[3]=c;
            }
            p[3].fi=max(p[3].fi,x);
            if(p[3].fi==x) cr[3]=c;
        }
        else
        {
            if(!flag[7])
            {
                flag[7]=1;
                p[7].fi=x;p[7].se=yy;cr[7]=c;
            }
            p[7].fi=min(p[7].fi,x);
            if(p[7].fi==x) cr[7]=c;
        }
    }
    else if(x+y==xx+yy)
    {
        if(x>xx&&y<yy)
        {
            if(!flag[8])
            {
                flag[8]=1;
                p[8].fi=x;p[8].se=y;cr[8]=c;
            }
            p[8].fi=min(p[8].fi,x);
            p[8].se=max(p[8].se,y);
            if(p[8].fi==x) cr[8]=c;
        }
        else
        {
            if(!flag[4])
            {
                flag[4]=1;
                p[4].fi=x;p[4].se=y;cr[4]=c;
            }
            p[4].fi=max(p[4].fi,x);
            p[4].se=min(p[4].se,y);
            if(p[4].fi==x) cr[4]=c;
        }
    }
    else if(x-y==xx-yy)
    {
        if(x<xx&&y<yy)
        {
            if(!flag[2])
            {
                flag[2]=1;
                p[2].fi=x;p[2].se=y;cr[2]=c;
            }
            p[2].fi=max(p[2].fi,x);
            p[2].se=max(p[2].se,y);
            if(p[2].fi==x)cr[2]=c;
        }
        else
        {
            if(!flag[6])
            {
                flag[6]=1;
                p[6].fi=x;p[6].se=y;cr[6]=c;
            }
            p[6].fi=min(p[6].fi,x);
            p[6].se=min(p[6].se,y);
            if(p[6].fi==x) cr[6]=c;
        }
    }
}

int main()
{
    int n;
    cin>>n;
    cin>>xx>>yy;
    ll x,y;
    char c;
    while(n--)
    {
        cin>>c>>x>>y;
        judge(c,x,y);
    }
    bool is=false;
    for(int i=1;i<=8;i++)
    {
        //cout<<p[i].fi<<" "<<p[i].se<<" "<<cr[i]<<endl;
        if(i%2&&(cr[i]==‘R‘||cr[i]==‘Q‘))
            is=true;
        else if(i%2==0&&(cr[i]==‘B‘||cr[i]==‘Q‘))
            is=true;
    }
    if(is)
        cout<<"YES\n";
    else
        cout<<"NO\n";
    return 0;
}

//出题author优美版

#include <cstdio>
#include <algorithm>

using namespace std;

inline char in_char()
{
    char c = ‘\0‘;
    while (c <= ‘ ‘)
        c = getchar();
    return c;
}

inline int in_int()
{
    int n;
    scanf("%d", &n);
    return n;
}

struct figurine
{
    char kind;
    int x, y;
};

int n;
int x0, y0;
figurine nearest[8];

inline int dist(int x1, int y1, int x2, int y2)
{
    return max(abs(x1 - x2), abs(y1 - y2));
}

inline void upd_nearest(figurine& was, const figurine& cur)
{
    if (was.kind == ‘?‘ ||
        dist(x0, y0, cur.x, cur.y) < dist(x0, y0, was.x, was.y))
    was = cur;
}

inline int get_direction(const figurine& cur)
{
    // vertical
    if (cur.x == x0 && cur.y < y0) return 0;
    if (cur.x == x0 && cur.y > y0) return 1;
    // horizontal
    if (cur.y == y0 && cur.x < x0) return 2;
    if (cur.y == y0 && cur.x > x0) return 3;
    // diagonal 1
    if ((cur.y - y0) == (cur.x - x0) && cur.x < x0) return 4;
    if ((cur.y - y0) == (cur.x - x0) && cur.x > x0) return 5;
    // diagonal 2
    if ((cur.y - y0) == (x0 - cur.x) && cur.y < y0) return 6;
    if ((cur.y - y0) == (x0 - cur.x) && cur.y > y0) return 7;
    // the piece doesn‘t lie on any of the eight directions
    return -1;
}

int main()
{
    n = in_int();
    x0 = in_int(); y0 = in_int();
    for (int i = 0; i < 8; i++)
        nearest[i].kind = ‘?‘;
    // read and update nearest
    for (int i = 0; i < n; i++)
    {
        figurine cur;
        cur.kind = in_char(); cur.x = in_int(); cur.y = in_int();
        int dir = get_direction(cur);
        if (dir >= 0)
            upd_nearest(nearest[dir], cur);
    }
    bool ans = false;
    // check verticals and horizontals
    for (int i = 0; i < 4; i++)
        if (nearest[i].kind == ‘R‘ || nearest[i].kind == ‘Q‘)
            ans = true;
    // check diagonals
    for (int i = 4; i < 8; i++)
        if (nearest[i].kind == ‘B‘ || nearest[i].kind == ‘Q‘)
            ans = true;
    // output
    puts(ans ? "YES" : "NO");
    return 0;
}

E.

待更新

时间: 2024-12-20 05:39:27

cf #379div2的相关文章

微信 {&quot;errcode&quot;:40029,&quot;errmsg&quot;:&quot;invalid code, hints: [ req_id: Cf.y.a0389s108 ]&quot;}

{"errcode":40029,"errmsg":"invalid code, hints: [ req_id: Cf.y.a0389s108 ]"} 问题:微信网页授权后,获取到 openid 了,一刷新又没了 微信网页授权获取到的 code 只能使用一次(5分钟内有效),使用一次后,马上失效. 页面授权跳转成功,根据 code 也换取到 openid 了. 此时刷新页面,并不会再次进行授权,而是直接刷新了一下上一次授权跳转后的链接,带的还是

CF with friends and user&#39;s influence considered on NYC data(updated Aug,11st)

Here is the code link: https://github.com/FassyGit/LightFM_liu/blob/master/U_F1.py I use NYC data as other experimens. The split of the training data was seperated by the timeline, and I have normalised the interaction matrix by replacing the checkin

CF 750

今天CF打的块残废了     就是一废物 A 在24点之前到 直接模拟即可 #include<stdio.h> #include<algorithm> #include<cstring> #include<string> #include<cmath> using namespace std; #define LL long long #define MAXN 1010 #define inf 1000000000.0 int main() {

CF #394 (2) 5/6

Codeforces Round #394 (Div. 2) 总结:有毒的一场比赛.做了三题,结果A被叉,B.C挂综测,还hack失败一发,第一次在CF体会到了-50分的感觉..不知道是不是人品好,比赛时room炸了,然后,unrated.. A  水题,判一下0 0,然后abs(a-b)<=1 B  水题,组个间距比较一下,但一个数的时候要判一下 C  直接暴力上的题 D  也是xjb暴力 题意:给出n,l,r, a[], p[],另有两个数组b[], c[],ci=bi-ai.l<=ai,

一场CF的台前幕后(上)——转

前奏 大约4月份的时候,业界毒瘤pyx噔噔噔跑过来说:“酷爱!我YY了一道题!准备当CF的C” 我当时就被吓傻了."Yet another Chinese round?" “区间取模,区间求和” 感觉这题还不错?不过pyx嫌水了…… 好办!当时我刚刚出完动态仙人掌不久,于是一拍脑袋说:把这个问题出到仙人掌上去! 当然被pyx鄙视了…… 后来一直就没啥动静,直到5月底的CTSC. 试机的时候pyx给我看了套他出的神题……里面有一道题……我不小心读成了下面这个样子: “给定n个m维的模2意

[2016-03-22][CF][69A][Young Physicist]

时间:2016-03-22 19:41:34 星期二 题目编号:[2016-03-22][CF][69A][Young Physicist] 题目大意:判断向量和是否为0 分析:对应坐标相加 遇到的问题:不能用x+y+z来判断是否都为0,除非输入都是正数 #include <cstdio> using namespace std; int main(){ int a,b,c,x,y,z,n; x = y = z = 0; scanf("%d",&n); for(in

ARC下OC对象和CF对象之间的桥接(bridge)

在开发iOS应用程序时我们有时会用到Core Foundation对象简称CF,例如Core Graphics.Core Text,并且我们可能需要将CF对象和OC对象进行互相转化,我们知道,ARC环境下编译器不会自动管理CF对象的内存,所以当我们创建了一个CF对象以后就需要我们使用CFRelease将其手动释放,那么CF和OC相互转化的时候该如何管理内存呢?答案就是我们在需要时可以使用__bridge,__bridge_transfer,__bridge_retained,具体介绍和用法如下

【CF 520D】Cubes

[CF 520D]Cubes 怎么说呢--英语阅读题+超级大模拟-- 最重要的是知道怎么出来的数据...题意好懂 xy坐标内给出几个单位正方形 以正方形左下点坐标给出 y=0为地面 正方形下面或者左右下方至少存在一个正方形他才能稳定.. 正方形按0~m-1标号 每次只能取出不影响整体结构的正方形 甲乙玩一个游戏 交替取正方形 每取下一个按从左到右的顺序排好 得到一个大数 重点来了! 取出的数是m进制 转换为十进制是最终结果 甲希望结果最大 乙希望结果最小 问结果为多少 甲先取 题意明白了模拟就行

cf 148D Bag of mice

The dragon 选一只老鼠,然后会跑掉一只 the princess选一只老鼠,不会跑出另外的老鼠 求the princess赢的概率 1 #include<iostream> 2 #include<string> 3 #include<cstdio> 4 #include<vector> 5 #include<queue> 6 #include<stack> 7 #include<algorithm> 8 #inc