ABC 053

fcking / 2024-12-29 / 原文

ABC 053

目录
  • ABC 053
    • A - ABC/ARC
    • B - A to Z String
    • C - X: Yet Another Die Game
    • D - Card Eater

A - ABC/ARC

题意 : x>1200,输出"ARC",小于输出"ABC"

Submission #59141472 - AtCoder Beginner Contest 053

B - A to Z String

题意 : 找出以'A'开头'Z'结尾的最长子串

思路 : 找出第一个'A'的位置 x 和'Z'的最后一个位置 y,ans=y-x+1;

Submission #59141520 - AtCoder Beginner Contest 053

C - X: Yet Another Die Game

Submission #59145419 - AtCoder Beginner Contest 053

题意 : 你有一个骰子,刚开始任意一面向上,之后每一轮你可以翻转一次骰子,每次你将获得骰子正面向上的点数作为分数,问至少多少轮之后你获得的分数 >= x?

思路 :贪心的想6和5交换着取,第一次取6,第二次取5这样,即656565~~这样取,先对11取整,再对余数考虑,余数>=6,要2次,小于6要一次

    ll n;
    cin>>n;
    ll ans=n/11;
    ans*=2;
    ll m=n%11;
    if(m){	
    if(m<=6)ans++;
    else ans+=2;
    }
    
    cout<<ans<<"\n";

D - Card Eater

Submission #59141974 - AtCoder Beginner Contest 053

题意 : 你有 n 张卡片 ,每张卡片上面写着都写着一个数(可重复),每次你可以选3个数,只保留3个数的第二大,最后只能剩下不重复的数,问最后最多有多少个数可以剩下?

思路 : ans = 刚开始时不同数的个数.贪心的发现同一个数之间可以自我消除,cnt[x]表示 x 的个数,cnt[x]为奇数个可以自我消除后剩下一个 x ,cnt[x]为偶数的话则多一个 x 要用其它数来消除,则统计有多少个多出来的个数res要删除,若 res为奇数,则不需要用多的其它数来消除, res为偶数,ans--;

比如多出来1 3,则可以1 1 3消除掉1 3。

    int n;
    cin>>n;
    map<int,int>cnt;
    for(int i=1;i<=n;i++){
    	int x;cin>>x;
    	cnt[x]++;
    }
    int ans=cnt.size();
    int res=0;
    for(auto [x,y]:cnt){
    	if(y%2==0)res++;
    }
    if(res%2==1)ans--;
    cout<<ans<<"\n";