Codeforces 杂题汇编(0)

版权声明:ACM代码随意转载。算法描述需备注来源。谢谢合作。 https://blog.csdn.net/Sensente/article/details/87870568

补题记录。当然先从顺序刷。。

1.

Educational Codeforces Round 60 (Rated for Div. 2) B. Emotes

https://codeforces.com/contest/1117/problem/B

题目大意:给定n个数字,一共进行m次加法操作,但是对于同一个数字一次只能加k次,然后需要一个数字进行分割才能继续加。

要求最大值肯定是两个最大的子值累加得到,考虑到数字已经开到ll,循环可能会TLE,直接记录一组值循环值,然后*循环次数,加上最后的未循环余数*最大值(余数肯定轮不到次大值),求和即可。

AC代码:

#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
int n;
ll m,k;
ll a[200005];
int main() {
    cin>>n>>m>>k;
    for(int i=0;i<n;i++) {
        cin>>a[i];
    }
    sort(a,a+n);
    ll num=m/(k+1);
    ll yu=m-(k+1)*(m/(k+1));
    ll xunhuan=k*a[n-1]+a[n-2];
    ll res=num*xunhuan + yu*a[n-1];
    cout<<res<<endl;
}

2.

Codeforces Round #126 (Div. 2) B. Drinks

https://codeforces.com/contest/200/problem/B

题目大意:浓度问题。。求不同浓度的果汁混合后浓度。

不用考虑什么公式,直接预设每一杯都是100ml,果汁有xx ml,求和相除即可。

AC代码:

#include <iostream>
#include <cmath>
#include <stack>
#include <cstring>
#include <string>
#include <set>
using namespace std;
typedef long long ll;
int n;
double a[110];
double num,sum;
double ans;
int main() {
    scanf("%d",&n);
    for(int i=1;i<=n;i++) {
        scanf("%lf",&a[i]);
        sum+=a[i];
    }
    num=n*100;
    printf("%.8lf",(sum/num)*100);
    
    return  0;
}

3.

Codeforces Beta Round #46 (Div. 2) A. Sleuth

https://codeforces.com/contest/49/problem/A

题目大意:给定一长串字符串,问最后一个字母字符(除去空格和标点符号),是不是他定义的元音(多了个'y'&'Y')。

直接从后往前询问,若满足'a'~'z'||'A'~'Z'就判断是否是元音,然后直接break循环即可。

AC代码:

#include <iostream>
#include <cmath>
#include <stack>
#include <cstring>
#include <string>
#include <set>
using namespace std;
typedef long long ll;
char a[100005];
char ss;
set<char> s;
int main() {
    gets(a);
    int len=strlen(a);
    for(int i=len;i>=0;i--) {
        if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z')) {
            if (a[i] == 'a' || a[i] == 'e' || a[i] == 'i'||a[i]=='o'||a[i]=='u'||a[i]=='y'||a[i]=='A'||a[i]=='E'||a[i]=='I'||a[i]=='O'||a[i]=='U'||a[i]=='Y') {
                cout << "YES" << endl;
                break;
            } else {
                cout << "NO" << endl;break;
            }
        } else {
            continue;
        }
    }
    return 0;
}

4.

Codeforces Round #379 (Div. 2) A. Anton and Danik

https://codeforces.com/contest/734/problem/A

题目大意:统计A与D个数,谁多输出谁。

AC代码:

#include <iostream>
#include <cmath>
#include <stack>
#include <cstring>
using namespace std;
typedef long long ll;
char a[100005];
int n;
ll p,q;
int main() {
    cin>>n;
    for(int i=0;i<n;i++) {
        cin>>a[i];
        if(a[i]=='A') p++;
        else if(a[i]=='D') q++;
    }
    if(p>q) cout<<"Anton"<<endl;
    else if(p<q) cout<<"Danik"<<endl;
    else if(p==q) cout<<"Friendship"<<endl;
}

5.

Codeforces Round #353 (Div. 2) A. Infinite Sequence

https://codeforces.com/contest/675/problem/A

题目大意:这题的意思是给a,b,c三个数字,问从[a~a+n*c]整数区间内是否恰好有b。

直接分类讨论,代码稍长。

#include <iostream>
#include <cmath>
#include <cstring>
using namespace std;
typedef long long ll;
ll a,b,c;
int main() {
    cin>>a>>b>>c;
    if(a==b) cout<<"YES"<<endl;
    else {
        if(c==0) {
            if(a==b) cout<<"YES"<<endl;
            else cout<<"NO"<<endl;
        }
        else if(c>0) {
            if(a<b&&(b-a)%c==0) cout<<"YES"<<endl;
            else cout<<"NO"<<endl;
        }
        else if(c<0) {
            if(a>b&&(b-a)%c==0) cout<<"YES"<<endl;
            else cout<<"NO"<<endl;
        }
    }
    return 0;
}

6.

Helvetic Coding Contest 2017 online mirror (teams allowed, unrated) G. Fake News (easy)

https://codeforces.com/contest/802/problem/G

题目大意:求问一定长度字符串内是否含有heidi按顺序排列但可以不连续的字符串。

这题并不相同于最长公共子序列。可以直接判断。

#include <iostream>
#include <cmath>
#include <cstring>
using namespace std;
typedef long long ll;
char a[1005];
char b[6]={'h','e','i','d','i'};
bool check(char a[],int len){
    bool f;
    int i = 0;
    for (int j=0;j<5;j++) {
        f = false;
        while (i<len) {
            if (a[i] == b[j]) {
                f=1;
                i++;
                break;
            }
            i++;
        }
        if (!f) return false;
    }
    return true;
}
int main() {
    cin>>a;
    int len=strlen(a);
    if(check(a,len)) cout<<"YES"<<endl;
    else cout<<"NO"<<endl;
    return 0;
}

7.

Codeforces Round #164 (Div. 2) B.Buttons

https://codeforces.com/contest/268/problem/B

题目大意:有n个开关,有且只有一种排列可以全部按下,否则按错当前开关,之前的开关都会弹开,需要重新计数。问最大的尝试次数。

递推/递归

可以发现这题明显存在着规律性。

试考虑对于所有的开关,必定有至少1次的按下次数(正确次数),且对于最后一个开关有且只有1次。

而对于第i个开关,可尝试次数与(n-i)有关,且考虑到按错之前的需要全部重按,那么对于第i个开关,需要尝试的次数就是

for(int I=2;i<=n-1;i++){
    a[I]=(n-i)*i(错误次数) + 1 (正确次数)
    }

然后累加即可。

AC代码:

#include <iostream>
#include <cmath>
using namespace std;
typedef long long ll;
ll n;
ll a[2005];
int num;
int main() {
    cin>>n;
    for(int i=2;i<=n-1;i++) {
        a[i]=(n-i)*i + 1;
        num+=a[i];
    }
    num=num+1+n;
    if(n==1) cout<<1<<endl;
    else
        cout<<num<<endl;
    return 0;
}

8.

Codeforces Round #200 (Div. 2) A. Magnets

https://codeforces.com/contest/344/problem/A

题目大意:按照01/10分磁铁的阴阳极,问按给定顺序排列的话有多少分组。

那么很明显,1001或者1001如果相连必然会排斥,生成1+1组。

我们只需记录按顺序输入有多少不一样的即可。

AC代码:

#include <iostream>
#include <cmath>
using namespace std;
typedef long long ll;
ll n;
int a[100005];
int num;
int main() {
    cin>>n;
    for(int i=0;i<n;i++) {
        cin>>a[i];
    }
    for(int i=0;i<n;i++) {
        if(a[i]!=a[i+1]) {
            num++;
        }
    }
    cout<<num<<endl;
        
    return 0;
}

9.

Codeforces Round #340 (Div. 2) A. Elephant

https://codeforces.com/contest/617/problem/A

题目大意:一只大象可以走(int)1~5步/次,问走到n需要多少步。

直接贪心。每次走最大的步数,然后看剩下多少即可。

AC代码:

#include <iostream>
#include <cmath>
using namespace std;
typedef long long ll;
ll n;
int a[110];
int b[110];
int num;
int main() {
    cin>>n;
    for(int i=5;i>=1;i--) {
        num+=n/i;
        n=n-(n/i)*i;
    }
    cout<<num<<endl;    
    
    return 0;
}

10.

Codeforces Beta Round #97 (Div. 2) A.Present

https://codeforces.com/contest/136/problem/A

题目大意:这题有点意思,问的是交错给礼物,问第i个人的礼物来自谁。

开两个数组,一个记录原始值方便更改,然后一次遍历,如果第i个人的值是k,则b[k]=i即可。

AC代码:

#include <iostream>
#include <cmath>
using namespace std;
typedef long long ll;
int n;
int a[110];
int b[110];
int num;
int main() {
    cin>>n;
    for(int i=1;i<=n;i++) {
        cin>>a[i];
    }
    for(int i=1;i<=n;i++) {
        for(int j=1;j<=n;j++) {
            if(i==a[j]) {
                b[i]=j;
                break;
            }
        }
    }
    for(int i=1;i<=n-1;i++) {
        cout<<b[i]<<" ";
    }cout<<b[n]<<endl;
}

11.

Codeforces Round #161 (Div. 2) A. Beautiful Matrix

https://codeforces.com/contest/263/problem/A

题目大意:问1的行列值离矩阵最中心差多少。。。

AC代码:

#include <iostream>
#include <cmath>
using namespace std;
typedef long long ll;
int a[5][5];
int x,y;
int num;
int main() {
    for(int i=0;i<5;i++) {
        for(int j=0;j<5;j++) {
            cin>>a[i][j];
            if(a[i][j]==1) {
                x=i;
                y=j;
            }
        }
    }
    num=abs(2-x)+abs(2-y);
    cout<<num<<endl;
}

12.

Codeforces Round #437 (Div. 2, based on MemSQL Start[c]UP 3.0 - Round 2) A. Between the Offices

https://codeforces.com/contest/867/problem/A

题目大意:给定一串字符串,要求比较是SF还是FS次数多。

AC代码:

#include <iostream>
using namespace std;
typedef long long ll;
ll num;
char s[100];
ll n;
ll num1,num2;
ll a,b,c,d,e;
int main() {
    cin>>n;
    for(int i=0;i<n;i++) {
        cin>>s[i];
    }
    for(int i=0;i<n;i++) {
        if(s[i]=='S'&&s[i+1]=='F') num1++;
        else if(s[i]=='F'&&s[i+1]=='S') num2++;
    }
    num1>num2?cout<<"YES"<<endl:cout<<"NO"<<endl;
}

13.

Codeforces Round #473 (Div. 2) A. Mahmoud and Ehab and the even-odd game 

https://codeforces.com/contest/959/problem/A

题目大意:纯粹的奇偶数判断。

#include <iostream>
using namespace std;
typedef long long ll;
ll num;
char s[100];
ll n;
ll a,b,c,d,e;
int main() {
    cin>>n;
    if(n%2) cout<<"Ehab"<<endl;
    else cout<<"Mahmoud"<<endl;
    return 0;
}

14.

Codeforces Round #492 (Div. 2) [Thanks, uDebug!] A.Hit the Lottery

https://codeforces.com/contest/996/problem/A

题目大意:同上面那个大象,贪心。

#include <iostream>
using namespace std;
typedef long long ll;
ll num;
char s[100];
ll n;
ll a,b,c,d,e;
int main() {
    cin>>n;
    a=n/100;
    n=n-100*(n/100);
    b=n/20;
    n=n-20*(n/20);
    c=n/10;
    n=n-10*(n/10);
    d=n/5;
    e=n-5*(n/5);
    num=a+b+c+d+e;
    cout<<num<<endl;
    return 0;
}

15.

Codeforces Round #465 (Div. 2) A. Fafa and his Company

https://codeforces.com/contest/935/problem/A

题目大意:将员工分组,每组里有一位领导,问最小的分组数。

实际上就是问除去其本身的公因数。看出这一点就很简单。

AC代码:

#include <iostream>
using namespace std;
int num;
char s[100];
int n;
int main() {
    cin>>n;
    for(int i=1;i<n;i++) {
        if(n%i==0) {
            num++;
        }
    }
    cout<<num<<endl;
    return 0;
}

16.

Codeforces Round #404 (Div. 2) A. Anton and Polyhedrons

https://codeforces.com/contest/785/problem/A

题目大意:给定n个多面体,求面数之和。

直接枚举相加。注意由于每个多面体首字母不同,可直接判断。

AC代码:

#include <iostream>
using namespace std;
int num;
char s[100];
int n;
int main() {
    cin>>n;
    for(int i=0;i<n;i++) {
        cin>>s;
        if(s[0]=='T') num+=4;
        else if(s[0]=='C') num+=6;
        else if(s[0]=='O' ) num+=8;
        else if(s[0]=='D') num+=12;
        else if(s[0]=='I') num+=20;
    }
    cout<<num<<endl;
    return 0;
}

17.

Codeforces Round #366 (Div. 2) A.Hulk

https://codeforces.com/contest/705/problem/A

题目大意:一个人情感复杂,一边说love一边说hate。

找规律输出即可。

AC代码:

#include <iostream>
#include <algorithm>
#include <set>
#include <stack>
#include <cmath>
#include <cstring>
using namespace std;
int n,k;
//int num;

int main() {
    cin>>n;
    for(int i=1;i<=3*n;i++) {
        for(int j=0;j<n;j++) {
            if(i==1+j*3) cout<<"I ";
            else if(i==2+6*j) cout<<"hate ";
            else if(i==5+6*j) cout<<"love ";
            else if(i==3+3*j&&i!=3*n) cout<<"that ";
        }
        if(i==3*n) cout<<"it";
    }
    return 0;
}

18.

Codeforces Round #405 (rated, Div. 2, based on VK Cup 2017 Round 1) A. Bear and Big Brother

https://codeforces.com/contest/791/problem/A

题目大意:两头牛比重量,弟弟能翻3倍,哥哥体重只能涨2倍。问弟弟何时超过哥哥。

AC代码:

#include <iostream>
#include <algorithm>
#include <set>
#include <stack>
#include <cmath>
#include <cstring>
using namespace std;
int n,k;
int num;
char s[10000];
bool f;
int main() {
    cin>>n>>k;
    int year=1;
    for(int i=1;i<=10;i++) {
        n=3*n;
        k=2*k;
        if(n>k) {
            year=i;break;
        }
    }
    cout<<year<<endl;
    return 0;
}

19.

Technocup 2019 - Elimination Round 1 https://codeforces.com/contest/1030/problem/A

https://codeforces.com/contest/1030/problem/A

题目大意:询问是否有1。

AC代码:

#include <iostream>
#include <algorithm>
#include <set>
#include <stack>
#include <cmath>
#include <cstring>
using namespace std;
int n,k;
int num;
char s[10000];
bool f;
int main() {
    cin>>n;
    for(int i=0;i<n;i++) {
        cin>>k;
        if(k==0) continue;
        else f=1;
    }
    if(f) cout<<"HARD"<<endl;
    else cout<<"EASY"<<endl;
    return 0;
}

20.

Codeforces Round #479 (Div. 3) A. Wrong Subtraction

https://codeforces.com/contest/977/problem/A

题目大意:尾数为0就--,否则/=10;

AC代码:

#include <iostream>
#include <algorithm>
#include <set>
#include <stack>
#include <cmath>
#include <cstring>
using namespace std;
int n,k;
int num;
char s[10000];
stack<char> ss;
int main() {
    cin>>n>>k;
    while(k--) {
        if(n%10) n--;
        else n/=10;
    }
    cout<<n<<endl;
    return 0;
}

21.

Codeforces Round #230 (Div. 2) A. Nineteen 

https://codeforces.com/contest/393/problem/A

题目大意:问字符串中有多少个nineteen;

用i来判断个数,同时限定n,e,t的个数大小,判断即可。

AC代码:

#include <iostream>
#include <algorithm>
#include <set>
#include <stack>
#include <cmath>
#include <cstring>
using namespace std;
int n,k;
int N,I,T,E;
int num;
char s[10000];
stack<char> ss;
int main() {
    cin>>s;
    int len=strlen(s);
    for(int i=0;i<len;i++) {
        ss.push(s[i]);
        if(ss.top()=='n') {
            N++;
        }
        else if(ss.top()=='i') {
            I++;
        }
        else if(ss.top()=='t') {
            T++;
        }
        else if(ss.top()=='e') {
            E++;
        }
    }
    for(int i=1;i<=I;i++) {
        if(N>2*i&&E>=3*i&&T>=i) {
            num++;
        }
    }
    if(num)cout<<num<<endl;
    else cout<<0<<endl;
    return 0;
}

22.

Technocup 2019 - Elimination Round 3 A. Kitchen Utensils

https://codeforces.com/contest/1032/problem/A

题目大意:有不同类型的盘子,问有可能最少少了多少个。

AC代码:

#include <iostream>
#include <algorithm>
#include <set>
#include <cmath>
using namespace std;
int n,k;
int a[105];
int ans=1;
int maxx=-10000;
int cnt;
int num;
int res;
set <int> s;
int main() {
    cin>>n>>k;
    for(int i=0;i<n;i++) {
        cin>>a[i];
        s.insert(a[i]);
    }
    sort(a,a+n);
    maxx=1;
    for(int i=0;i<n;i++) {
        if(a[i]==a[i+1]){
            ans++;
            if(ans>maxx) maxx=ans;
        }
        else ans=1;
    }
    if(maxx%k==0) {
        cnt=maxx/k;
    }else {
        cnt = ceil(maxx / k+0.1);
    }
    num=s.size();
    res=cnt*k*num-n;
    if(res>=0) cout<<res<<endl;
    else cout<<0<<endl;
    return 0;
}

~22~

猜你喜欢

转载自blog.csdn.net/Sensente/article/details/87870568