首页 > 其他分享 >Codeforces Round 880 (Div. 2) C. k-th equality

Codeforces Round 880 (Div. 2) C. k-th equality

时间:2023-06-20 10:55:37浏览次数:35  
标签:10 880 equality int pow Codeforces 等式 区间 式子

看好久题目了,题目大意是给定三个位数A,B,C和一个k,要求求所有满足要求的a+b=c等式中的第k个等式

等式按字典序由小到大枚举,例如1+9=10和2+6=8中1+9=10比2+6=8小

思路我们首先求出a,b,c的取值范围,然后先确定a,对于每一个确定的a都有一个确定的b和c区间与之对应,并且a+b=c,c=a-b,当a和b确定时,c也就确定了

,所以主要考虑在a确定的情况下的b区间的长度,最后找到第k个式子的区间

k个式子=区间1的等式个数+区间2+....包含第k个式子的区间中为第j个式子

然后k不断减去前面的区间最后k=j,求出为包含第k个式子区间的第j个等式得结果

#include <iostream>
#include <string>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long ll;
int a,b,c;
ll k;
void solve(){
		cin>>a>>b>>c>>k;
		//注意最大取值为max-1
		int max_a=pow(10,a),min_a=pow(10,a-1);//a的范围 
		int max_b=pow(10,b),min_b=pow(10,b-1);//b的范围 
		int max_c=pow(10,c),min_c=pow(10,c-1);//c的范围 
		for(int i=min_a;i<max_a;i++){//将a按字典序枚举 
			ll x=max(min_b,min_c-i);//求出b的最小取值,不能小于b的最小值也不能加a小于c的最小值 
			ll y=min(max_b,max_c-i);//求出b的最大取值,不能大于b的最大取值加a也不能大于c的最大取值,又因为a,b,c均为正整数,因此c-i一定小于pow(10,c) 
			if(x>y) continue;//如果区间小于1就跳过 
			if(y-x>=k){//如果该区间数大于k说明第k个等式就在该区间中 
				cout<<i<<" + "<<x+k-1<<" = "<<x+k-1+i<<endl;//注意从x开始算第k个为x+k-1 
				return;
			}
			k-=y-x;//如果该区间小于k,k减去该区间等式个数 
		}
		cout<<-1<<endl;
}
int main(){
	int t;
	cin>>t;
	while(t--){
		solve();
	}
	
}

 

标签:10,880,equality,int,pow,Codeforces,等式,区间,式子
From: https://www.cnblogs.com/liyiyang/p/17493015.html

相关文章

  • Educational Codeforces Round 82 (Rated for Div. 2)_A. Erasing Zeroes(C++_模拟)
    Youaregivenastring.Eachcharacteriseither0or1.Youwantall1’sinthestringtoformacontiguoussubsegment.Forexample,ifthestringis0,1,00111or01111100,thenall1’sformacontiguoussubsegment,andifthestringis0101,100001o......
  • Codeforces Round 879 (Div. 2) 题解
    寄!大!了!Rating-=124.(恼)https://codeforces.com/contest/1834C.GamewithReversing发现\(\text{rev}(S)\toS\)和\(\text{rev}(T)\toT\)本质上是一样的。赛时就一个劲的对着\(S\)操作,,,。我们考虑单点修改在\(S\)上做,翻转操作在\(T\)上做。设\(\displaysty......
  • Codeforces 1834 / Codeforces Round #879 (Div. 2)
    目录ContestLinkProblemBMaximumStrengthProblemCGamewithReversingProblemDSurveyinClassProblemEMEXofLCMProblemFTypewriterContestLinkCodeforcesRound#879(Div.2)ProblemBMaximumStrength题意给定\(L,R\),求两个整数\(L\leqa,b\leqR\)......
  • Codeforces Round 879 (Div
    CodeforcesRound879(Div.2)A-D题解第一次写题解,请见谅O3Oa题代码是完整的,后面的只显示主要内容的代码A.UnitArray题目解释他会给你一个只包含1或者-1的数字串,每次操作可以把1变成-1或者把-1变成1,要求操作之后的串满足每一位累加>=0,每一位累乘=1,求最小的操作次数思路......
  • Codeforces1 #879 div.2
    第一次参加codeforces比赛,只能做出来俩题,第三个题思路也就一半一半,估计是想不出来的那种,赛后问了下带佬,把我思路添加了点,最终还是A了争取稳过第三题!//A//统计1,-1出现的次数,然后如果-1是奇数,让他变成偶数,次数+1//因为总乘积要是正1,然后再变-1为1,直到>=0为止,这里......
  • Educational Codeforces Round 150 (Rated for Div. 2) C. Ranom Numbers
    #include<iostream>#include<string>#include<cstring>#include<algorithm>#include<cmath>usingnamespacestd;constintN=2e5+10;typedeflonglongll;//记录每个字母的最前面的位置和最后面的位置intFast[5],End[5];strings,c;llres=-0x3......
  • Educational Codeforces Round 150 (Rated for Div. 2) B. Keep it Beautiful
    #include<iostream>#include<cstring>usingnamespacestd;constintN=2e5+10;inta[N],res[N];intt;intmain(){ cin>>t; while(t--){ intn; cin>>n; for(inti=0;i<n;i++){ cin>>a[i]; } intk=a[0]; res[0]=......
  • CodeForces 1841C Ranom Numbers
    洛谷传送门CF传送门先反转\(s\)串,然后考虑dp,设\(f_{i,j,0/1}\)为考虑了\([1,i]\),前缀最大值为\(j\),是否修改过字符的最大得分。转移讨论是否在这个位置修改即可。时间复杂度\(O(n)\)。code//Problem:C.RanomNumbers//Contest:Codeforces-Educational......
  • CodeForces 1839E Decreasing Game
    洛谷传送门CF传送门不会,不知道该如何评价。确实是自己的问题。这种题肯定考虑先/后手必胜的充要条件。直接给出结论:若\(a\)能被分成两个和相等的可重集,后手必胜,否则先手必胜。感性理解一下,如果\(a\)能被分成两个和相等的可重集,先手选一个数,后手选另一个可重集中的数。......
  • Educational Codeforces Round 150 (Rated for Div. 2) 题解
    https://codeforces.com/contest/1841https://codeforces.com/contest/1841/problemsD.PairsofSegmentshttps://codeforces.com/contest/1841/problem/D因为\(n\)只有\(2000\),所以考虑枚举每一对\((i,j)\)满足区间有交集并且\(i\neqj\)。如果有交集,就合并。然后......