首页 > 其他分享 >P2192 HXY玩卡片 题解

P2192 HXY玩卡片 题解

时间:2024-05-01 20:23:23浏览次数:24  
标签:10 P2192 输出 int 题解 ch HXY 整除

题目简述

给定一些 $5$ 和 $0$ 的数字,让你在其中选择一些数进行排列成为一个非负整数,使得这个数字能被 $90$ 整除,且是所有满足条件的数中最大的一个,无解输出 $-1$。

题目分析

如果一个数能被 $90$ 整除,那么它一定能被 $9$ 和 $10$ 整除。

  • 能被 $10$ 整除,那就说面答案的个位数一定是 $0$,如果没有 $0$ 的话就是无解。
  • 能被 $9$ 整除,那就说明答案的各个位加起来的和能被 $9$ 整除,由于答案仅有 $0$ 和 $5$ 组成,所以只需要判断所有 $5$ 加起来能否被 $9$ 整除即可。也就是说,如果有 $x$ 个 $5$,那么需要保证 $5 \cdot x$ 是 $9$ 的倍数,所以有 $x \mid 9$。

有了上面的推导,我们便有了解法:

设一共有 $x$ 个 $5$,因为要满足 $x \mid 9$,所以我们最多只能选 $\lfloor \frac{x}{9} \rfloor \times 9$ 个 $5$。因为要求最大,所以把这些 $5$ 先输出,最后输出有的所有 $0$。但是有可能没有足够的 $5$,这样就只能输出 $0$ 了,当然是在有 $0$ 的情况下。

代码

#include<iostream>
using namespace std;
int n,cnt1,cnt2;
inline int read()
{
	int x=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9')
	{
	    if(ch=='-')
		{
			f=-1;
		}
		ch=getchar();
	}
	while(ch>='0'&&ch<='9')
	{
	    x=(x<<1)+(x<<3)+ch-48;
	    ch=getchar();
	}
	return x*f;
}
inline void write(int x)
{
    if(x<0)
	{
    	putchar('-');
		x=-x;
	}
    if(x>9) write(x/10);
    putchar(x%10+'0');
}
int main()
{
	n=read();
	for(int i=0,a=0;i<n;i++)
	{
		a=read();
		a==5?cnt1++:cnt2++;
	} 
	if(cnt1>=9&&cnt2>0)
	{
		for(int i=1;i<=cnt1/9*9;i++)
		{
			printf("5");
		}
		for(int i=1;i<=cnt2;i++)
		{
			printf("0");
		}
	}
	else if(cnt2>0)
	{
		printf("0");
	}
	else printf("-1");
	return 0;
}

标签:10,P2192,输出,int,题解,ch,HXY,整除
From: https://www.cnblogs.com/zhuluoan/p/18169604

相关文章

  • [题解]P4597 序列 sequence
    P4597序列sequence是CF13CSequence的加强版,\(N\leq5*10^5\)。如果想了解\(O(N^2)\)的DP解法请看此文。给定\(N\)个数,每次操作可以选其中一个数\(+1\)或\(-1\)。请问要让这个数列不降,最少需要多少次操作?看到数据范围发现不能用\(O(N^2)\)的dp了,需要换一种思路。我们用类......
  • [题解]CF13C Sequence
    CF13CSequence给定\(N\)个数,每次操作可以选其中一个数\(+1\)或\(-1\)。请问要让这个数列不降,最少需要多少次操作?我们用DP解决。对\(a\)从小到大排序,存在\(c\)中。我们用\(f[i][j]\)表示让前\(i\)个元素满足条件,而且这些元素最大值不超过\(c[j]\)的最小操作次数。状态转移方......
  • 异或与区间加题解
    异或与区间加题解简要题意给定\(n,m,K,a_{1...n}\),和\(m\)个三元组\((x_i,y_i,z_i)\),定义\(calc(l,r)=a_l\bigoplusa_{l+1}\bigoplus...\bigoplusa_r\)。对于每个三元组\((x,y,z)\),对所有满足\(x\lel\ler\ley\,\calc(l,r)=K\)的区间\((l,r)\)内的每个数\(b......
  • CF1967B2 Reverse Card (Hard Version) 题解
    题意:求有多少对\((a,b)\)满足\(b\times\gcd(a,b)\equiv0\pmod{a+b},1\lea\len,1\leb\lem\)。首先我们设\(\gcd(a,b)=G,a=i\timesG,b=j\timesG\),显然有\(\gcd(i,j)=1\)。那么可以把原条件转化为\(j\timesG\)是\((i+j)\)的倍数。因为\(\gcd(i+......
  • Codeforces Round 942 Div.2 题解
    蹭个热度,挽救一下cnblogs蒸蒸日上的阅读量。Q:你是手速狗吗?A:我觉得我是。2A因为选的\(w\)一定可以让它合法,一次操作可以看作\(a\)数组向右平移一位。枚举操作次数后暴力判断即可。#include<bits/stdc++.h>voidwork(){ intn; std::cin>>n; std::vector<......
  • 【题解】 量化交易5
    题目描述applepi训练了一个可以自动在股票市场进行量化交易的模型。通常来说,applepi写出的模型,你懂得,就好比一架印钞机。不过为了谨慎起见,applepi还是想先检查一下模型的效果。applpie收集了“塞帕思股份(surpass)”在最近的连续N天内的价格。在每一天中,他可以做如下事情之一:......
  • Educational Codeforces Round 165 (Rated for Div. 2) 题解
    A对于\(i\top_i\)连边。如果存在二元环,则答案为2。否则答案为3。B非降序排序:0全部在1前面。令0的个数为z。从左往右,将前z个全部填上0。填第\(i\)位时,每次填的最小代价为:若第\(i\)位为1,第\(i\)位右边的第一个0到\(i\)之间的字符个数。(贪心)......
  • 【题解】 量化交易4
    题目描述applepi训练了一个可以自动在股票市场进行量化交易的模型。通常来说,applepi写出的模型,你懂得,就好比一架印钞机。不过为了谨慎起见,applepi还是想先检查一下模型的效果。applpie收集了“塞帕思股份(surpass)”在最近的连续N天内的价格。在每一天中,他可以做如下事情之一:......
  • 【题解】 量化交易3
    题目描述applepi训练了一个可以自动在股票市场进行量化交易的模型。通常来说,applepi写出的模型,你懂得,就好比一架印钞机。不过为了谨慎起见,applepi还是想先检查一下模型的效果。applpie收集了“塞帕思股份(surpass)”在最近的连续N天内的价格。在每一天中,他可以做如下事情之一:......
  • CF1765C Card Guessing 题解
    考虑期望的线性性,求每种情况猜对的概率和,最终再除掉\({4n\choosen,n,n,n}\)。考虑枚举最少的出现次数\(mn\),记四种卡的出现次数分别为\(c_1,c_2,c_3,c_4\),\(c_1+c_2+c_3+c_4=i\lek\),则这种情况的方案数为:\[{i\choosec_1,c_2,c_3,c_4}{4n-i\choosen-c_1,n-c_2,n-c_3,n-c_......