Codeforces Round #559 (Div. 2) (还差2题)

总结:这次写的太菜了,一个B题写了很久, 这种维护一个最小值在计算的题目,下次要反应快点;

   C题是一个贪心,写的时候也是想了好久....

   D题这个范围.

A:

签到,算一个最开始有多少就行了,注意可以取到0,复杂度O(n)

#include <cstdio>
#include <iostream>
using namespace std;

int main()
{
    int n; char c;
    int ca=0, cb=0, beg=0;
    cin>>n;
    while(n--)
    {
        cin>>c;
        if(c==‘+‘) ca++;
        else if(c==‘-‘)cb++;
        if(beg+ca-cb<0) beg++;
    }
    //printf("ca=%d\ncb=%d\nbeg=%d\n", ca , cb, beg);
    cout<<beg+ca-cb<<endl;
    return 0;
}

B:

给出公式,求k的范围,枚举当前的最小的a[i],求满足条件的k即可,这题反应太慢了...复杂度O(nlogn)

#include <cstdio>
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;

const int INF=0x3f3f3f3f;
const int MAXN=1e6+5;
struct Node{
    int val;
    int cnt;
}a[MAXN];

bool cmp(Node x, Node y){
    return x.val<y.val;
}

int main()
{
    int ans=INF;
    int n; cin>>n;
    for(int i=1; i<=n; i++)
    {
        cin>>a[i].val;
        a[i].cnt=i;
    }
    sort(a, a+n, cmp);
    for(int i=1; i<=n; i++)
        ans=min(ans, a[i].val/max(a[i].cnt-1, n-a[i].cnt));
    cout<<ans<<endl;
    return 0;
}

C:

题意:给了n个boys对m个girls的 sweet 的min(n组),m个girls接受到n个boys的sweet的max(m组),求n个男生对m个女生的sweet的最小的和,不满足条件输出-1 ;

题解:先判断是否满足条件,对n个男生的min排序,对m个女生的max排序,优先将大的max添加到大的min那一组,在求一个sum;复杂度O(nlogn)

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std; 

const int MAXN=2e6;
int a[MAXN], b[MAXN], vis[MAXN], vismin[MAXN]; 

int main()
{
    //freopen("in.txt", "r", stdin);
    int n, m;
    cin>>n>>m;
    for(int i=1; i<=n; i++)
        cin>>a[i];
    for(int i=1; i<=m; i++)
        cin>>b[i]; 

    long long sum=0;
    for(int i=1; i<=n; i++)
        sum+=a[i];
    sum*=m;
    sort(a+1, a+1+n);
    sort(b+1, b+1+m);
    memset(vismin, 0, sizeof(vismin));
    for(int i=1; i<=n; i++) vis[i]=m-1; 

    int ok=1;
    for(int i=m; i>=1; i--)
    {
        if(b[i]<a[n]){
            ok=0; break;
        }
    }

    if(ok==0)
        cout<<"-1"<<endl;
    else
    {
        int A=n, B=m;
        for(int B=m; B>=1; B--)
        {
            while(b[B]<a[A]) A--;
            if(b[B]==a[A])
            {
                if(!vismin[A]) vismin[A]=1;
                else if(vis[A]>0) vis[A]--;
                else if(a[A-1]==b[B]){
                    A--; vismin[A]=1;
                }
                else {
                    A--; vis[A]--;
                }
                sum+=b[B]-a[A];
            }
            else
            {
                if(vis[A]>0) vis[A]--;
                else if(a[A-1]==b[B]){
                    A--; vismin[A]=1;
                }
                else {
                    A--; vis[A]--;
                }
                sum+=b[B]-a[A];
            }
        }
        cout<<sum<<endl;
    }
    return 0;
} 

D:

题意:给了n和k,n代表长度为n由0或者1组成的串,找出一个这样长度的串,且该串中最长的唯一子串的长度是k;

题解:找规律题,

#include <bits/stdc++.h>
using namespace std; 

int main()
{
    int n, k;
    cin >> n >> k;
    int a=(n-k)/2+1;
    for(int i=1; i<=n; i++)
    {
        if(i%a==0) printf("1");
        else printf("0");
    }
    return 0;
} 

原文地址:https://www.cnblogs.com/Yokel062/p/10913916.html

时间: 2024-12-30 00:05:58

Codeforces Round #559 (Div. 2) (还差2题)的相关文章

Codeforces Round #559(Div.1)

A 签到贪心题,特判了n=1或m=1的情况才发现2<=n,m<=1e5 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=1e5+7; int n,m; ll ans,a[N],b[N]; int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++)scanf("%I64d&

Codeforces Round #426 (Div. 2)A B C题+赛后小结

最近比赛有点多,可是好像每场比赛都是被虐,单纯磨砺心态的作用.最近讲的内容也有点多,即便是点到为止很浅显的版块,刷了专题之后的状态还是~"咦,能做,可是并没有把握能A啊".每场网络赛,我似乎都没用上新学的东西,能用上新学东西的题我A不了...5555555555555555 这场CF,讲真,打的心态爆炸,首先A题无限WA,赛后看下WA的那组数据是输入有一个999999999的样例,死骗子,说好的数据是1e9呢,哪能有数据是1e10-1,于是用long long,一下子Accept接收不

Codeforces Round #530 (Div. 2) (前三题题解)

总评 今天是个上分的好日子,可惜12:30修仙场并没有打... A. Snowball(小模拟) 我上来还以为直接能O(1)算出来没想到还能小于等于0的时候变成0,那么只能小模拟了.从最高的地方进行高度的模拟,如果遇到石头就去判断一下会不会小于0其他没有什么好说的了 代码 #include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int

Codeforces Round #320 (Div. 2) &quot;Or&quot; Game(好题,贪心/位运算/前缀后缀或)

1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<iostream> 5 using namespace std; 6 typedef long long ll; 7 /* 8 n个数,你最多有k次操作,每次操作可以选择一个数乘以x,问所有数或(|)的最大值 9 贪心思路:选一个数进行k此乘以x操作; 因为x>=2 10 111 ---> 1111 11

Codeforces Round #256 (Div. 2/A)/Codeforces448A_Rewards(水题)解题报告

对于这道水题本人觉得应该应用贪心算法来解这道题: 下面就贴出本人的代码吧: 1 #include<cstdio> 2 #include<iostream> 3 using namespace std; 4 5 int a[3],b[3]; 6 7 int main(void) 8 { 9 int n; 10 int need = 0; 11 int sum1 = 0,sum2 = 0; 12 for(int i=1;i<=3;++i){ 13 scanf("%d&q

Codeforces Round #344 (Div. 2) C. Report 水题

#include<bits/stdc++.h> #define REP(i,a,b) for(int i=a;i<=b;i++) #define MS0(a) memset(a,0,sizeof(a)) #define rep(i,a,b) for(int i=a;i>=b;i--) #define RI(x) scanf("%d",&x) #define RII(x,y) scanf("%d%d",&x,&y) #d

Codeforces Round #429 (Div. 2) 841B Godsend(签到题)

B. Godsend Leha somehow found an array consisting of n integers. Looking at it, he came up with a task. Two players play the game on the array. Players move one by one. The first player can choose for his move a subsegment of non-zero length with an

Codeforces Round #196 (Div. 2) A. Puzzles 水题

A. Puzzles Time Limit: 2 Sec  Memory Limit: 60 MB 题目连接 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5373 Description The end of the school year is near and Ms. Manana, the teacher, will soon have to say goodbye to a yet another class. S

Codeforces Round #279 (Div. 2) B - Queue 水题

#include<iostream> #include<mem.h> using namespace std; int p[1000001],q[1000001]; int main() { int n,x,y; memset(q,0,sizeof(q)); cin>>n; while(n) { cin>>x>>y; p[x]=y; q[x]++; q[y]--; n--;//p[x]表示在x之后两位的数是什么 //q[x]表示x这个数究竟有多少