Codeforces Round 925 (Div. 3) E. Anna and the Valentine‘s Day Gift (Java)

Codeforces Round 925 (Div. 3) E. Anna and the Valentine’s Day Gift (Java)

比赛链接:Codeforces Round 925 (Div. 3)

E题传送门:E. Anna and the Valentine’s Day Gift

题目:E. Anna and the Valentine’s Day Gift

在这里插入图片描述

样例 #1

样例输入 #1

9
2 2
14 2
3 5
9 56 1
4 10
1 2007 800 1580
4 5
5000 123 30 4
10 10
6 4 6 2 3 1 10 9 10 7
1 1
6
1 1
10
8 9
1 2 9 10 10 2 10 2
4 5
10 10 10 10

样例输出 #1

Sasha
Anna
Anna
Sasha
Sasha
Anna
Anna
Anna
Sasha

分析:

根据题目,我们只需要判断最后剩下的数是否大于 10m,而 0 ≤ m ≤ 2⋅106,数字太大,我们只能用字符串来处理答案,等价于最后剩下的数的长度是否大于m

我们知道,一个数发生反转,非0的数字和位于两个非0之间的数字0不会消失。
如 1234发生反转长度还是4位,12001发生反转长度还是5位。

我们定义 cnt 计算数的长度。

我们遍历先遍历数组a[i],对于每个a[i],我们计算这个数发生反转一定不会消失的数字个数,并将尾部0的个数添加到 list 集合中。

循环完毕后,我们得到cnt的值,接下来可以处理尾部0是否可以作为最后数字的一部分。

我们将list集合升序排列,定义len是list集合的长度,从list集合的第 n-1,n-3,n-5,… 的元素对应的尾部0,Anna操作都会消失,而第 n-2,n-4,n-6,…的元素对应的尾部0,Sasha操作我们可以保留,作为最后剩余数字的一部分。

最后得到的 cnt 是最后剩余数字长度的最大值,如果cnt > m,则 Sasha 胜利,否则 Anna 胜利。

代码:

import java.util.*;

public class Main{
    public static void main(String[] args) {           
    	Scanner sc = new Scanner(System.in);
    	int tr = sc.nextInt();
    	while(tr-->0) {
    		int n = sc.nextInt();int m = sc.nextInt();
    		String [] a = new String [n];
    		List<Integer> list = new ArrayList<>();
    		for(int i = 0;i < n;i++) {
    			a[i] = sc.next();
    		}
    		long cnt = 0;
    		for(int i = 0;i < n;i++) {
    			int len = a[i].length();
    			cnt += len;int cnt0 = 0;
    			for(int j = len-1;j >= 0;j--) {
    				if(a[i].charAt(j)=='0') {
    					cnt--;cnt0++;
    				}else {
    					break;
    				}
    			}
    			if(cnt0>0) list.add(cnt0);
    		}
    		Collections.sort(list);
    		int len = list.size();
    		for(int i = len-2;i >=0;i-=2) {
    			cnt += list.get(i);
    		}
    		if(cnt > m) {
    			System.out.println("Sasha");
    		}else {
    			System.out.println("Anna");
    		}
    	}
    	
    	sc.close();
    }
}
  • 13
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Codeforces Round 894 (Div. 3) 是一个Codeforces举办的比赛,是第894轮的Div. 3级别比赛。它包含了一系列题目,其中包括题目E. Kolya and Movie Theatre。 根据题目描述,E. Kolya and Movie Theatre问题要求我们给定两个字符串,通过三种操作来让字符串a等于字符串b。这三种操作分别为:交换a中相同位置的字符、交换a中对称位置的字符、交换b中对称位置的字符。我们需要先进行一次预处理,替换a中的字符,然后进行上述三种操作,最终得到a等于b的结果。我们需要计算预处理操作的次数。 根据引用的讨论,当且仅当b[i]==b[n-i-1]时,如果a[i]!=a[n-i-1],需要进行一次操作;否则不需要操作。所以我们可以遍历字符串b的前半部分,判断对应位置的字符是否与后半部分对称,并统计需要进行操作的次数。 以上就是Codeforces Round 894 (Div. 3)的简要说明和题目E. Kolya and Movie Theatre的要求。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Codeforces Round #498 (Div. 3) (A+B+C+D+E+F)](https://blog.csdn.net/qq_46030630/article/details/108804114)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Codeforces Round 894 (Div. 3)A~E题解](https://blog.csdn.net/gyeolhada/article/details/132491891)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值