ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Codeforces Round #218 (Div. 2)

2019-07-27 23:35:53  阅读:229  来源: 互联网

标签:__ int Codeforces 218 while input Div include com


原文链接:http://www.cnblogs.com/riasky/p/3464963.html

500pt,

题目链接:http://codeforces.com/problemset/problem/371/A

分析:k-periodic说明每一段长度为k,整个数组被分成这样长度为k的片段,要使得修改最少,求出k长度的片段中每个位置出现次数最多的数就行。

代码:

 

#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <string.h>
using namespace std;
int n,k;
int input[110];
map<int,int> m[110];
int right1[110];
int findMax(map<int,int> m)
{
    int index = 0;
    int cnt = 0;
    map<int,int>::iterator it = m.begin();
    for(;it!=m.end();it++)
    {
        if(it->second>cnt)
        {
            cnt = it->second;
            index = it->first;
        }
    }
    return index;
}
int main()
{
    while(cin>>n>>k)
    {
        memset(input,0,sizeof(input));
        memset(right1,0,sizeof(right1));
        for(int i=0;i<k;i++)
            m[i].clear();
        for(int i=0;i<n;i++)
            cin>>input[i];
        for(int i=0;i<n;i++)
        {
            m[i%k][input[i]]++;
        }
        for(int i=0;i<k;i++)
        {
            right1[i] = findMax(m[i]);
        }
        int ret = 0;
        for(int i=0;i<n/k;i++)
        {
            for(int j=0;j<k;j++)
            {
                if(input[i*k+j]!=right1[j])
                    ret++;
            }
        }
        cout<<ret<<endl;
        
    }
    return 0;
}


1000pt: 题目链接: http://codeforces.com/problemset/problem/371/B

 

题目分析:将每个数都除以2,3,5直到不能再除,如果最后数不一样就返回-1,一样就根据除的次数返回,具体看代码,这题我也是看了别人代码明白过来的

代码:

 

#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <string.h>
using namespace std;
int a,b;
int ret;
void div(int p)
{
    int cnta = 0;
    int cntb = 0;
    while(a%p==0&&a>0)
    {
        cnta++;
        a/=p;
    }
    while(b%p==0&&b>0)
    {
        cntb++;
        b/=p;
    }
    ret += abs(cnta-cntb);
}
int main()
{
    while(cin>>a>>b)
    {
        ret=0;
        div(2);
        div(3);
        div(5);
        cout<<(a==b?ret:-1)<<endl;
    }
    

    return 0;
}


1500:题目链接: http://codeforces.com/problemset/problem/371/C

 

分析:不要直接模拟计算会超时,直接二分查找,0-1e14,看哪个最能满足条件

代码:

 

#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <string.h>
using namespace std;
string s;
int nb1,ns1,nc1;//做一份需要的数量
int nb,ns,nc;//目前有的数量
int pb,ps,pc;__int64 r;//价格
bool ok(__int64 m)
{
    __int64 bneed = (m*nb1<=nb)?0:(m*nb1-nb)*pb;
    __int64 sneed = (m*ns1<=ns)?0:(m*ns1-ns)*ps;
    __int64 cneed = (m*nc1<=nc)?0:(m*nc1-nc)*pc;
    __int64 need = bneed+sneed+cneed;
    if(r>=need)
        return true;
    else
        return false;
}
int main()
{
    while(cin>>s)
    {
        nb1=0;ns1=0;nc1=0;
        for(int i=0;i<s.length();i++)
        {
            if(s[i]=='B')
                nb1++;
            if(s[i]=='S')
                ns1++;
            if(s[i]=='C')
                nc1++;
        }
        cin>>nb>>ns>>nc;
        cin>>pb>>ps>>pc>>r;
        __int64 ll=0,rr=1e14;
        while(ll<=rr-1)
        {
            __int64 mid = (ll+rr+1)/2;
            if(ok(mid))
            {
                ll = mid;
            }
            else
            {
                rr = mid-1;
            }
        }
        cout<<ll<<endl;

    }
    return 0;
}


 

 

转载于:https://www.cnblogs.com/riasky/p/3464963.html

标签:__,int,Codeforces,218,while,input,Div,include,com
来源: https://blog.csdn.net/weixin_30408675/article/details/97570699

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有