晚上要打ABC,赶紧热身一下。
目录
1684A - Digit Minimization
1684B - Z mod X = C
1108B - Divisors of Two Integers
1612B - Special Permutation
1684A - Digit Minimization
点击打开题目
题目大意:
十进制表示法中有一个不带零的整数n。爱丽丝和鲍勃正在用这个整数玩游戏。爱丽丝先开始。他们轮流玩游戏。
轮到Alice时,她必须交换位于不同位置的整数的任意两位数字。轮到鲍勃时,他总是去掉整数的最后一位。当只剩下一个数字时,游戏结束。
如果爱丽丝玩得很好,你必须找到她最终能得到的最小整数。
题目思路:如果是两位,直接输出个位,否则输出最小数字即可。
AC代码:
#includeusing namespace std; int main(){ cin.tie(0); ios::sync_with_stdio(0); int tc; cin>>tc; while(tc--){ string s; cin>>s; if(s.size()==2) cout<
1684B - Z mod X = C
点击打开题目
题目大意:
给你三个正整数a,b,c(a
x mod y=a,
y mod z=b,
z mod x=c。
这里,p mod q表示p除以q的余数。可以表明,对于此类约束,答案总是存在的。
题目思路:将z设定为最小值,那么x=a+b+c,y=b+c,y=c.数学题。
AC代码:
#includeusing namespace std; int main(){ cin.tie(0); ios::sync_with_stdio(0); int tc; cin>>tc; while(tc--){ long long a,b,c; cin>>a>>b>>c; cout<
1108B - Divisors of Two Integers点击打开题目
点击查看博主透露的部分测试点
题目大意:
最近您收到了两个正整数x和y。您忘记了它们,但您记得一个无序列表,其中包含x的所有除数(包括1和x)和y的所有除数(包括1和y)。如果d同时是数字x和y的除数,则列表中会出现两次d。
例如,如果x=4,y=6,那么给定的列表可以是列表的任何排列[1,2,4,1,2,3,6]。一些可能的列表是:[1,1,2,4,6,3,2]、[4,6,1,1,2,3,2]或[1,6,3,2,4,1,2]。
您的问题是恢复适当的正整数x和y,它们将产生相同的除数列表(可能是不同的顺序)。
可以保证答案存在,即给定的除数列表对应于一些正整数x和y。
题目思路:
方法一:第一个是最大值,第二个是去掉第一个的所有因数后的最大值。
方法二:第一个是最大值,第二个是第一个重复的因数或不是因数(最大)。
AC代码:
方法一:
#includeusing namespace std; int main(){ cin.tie(0); ios::sync_with_stdio(0); int n; cin>>n; set se; int a[130]; for(int i=0;i >a[i]; sort(a,a+n); cout< 方法二:
#includeusing namespace std; int main(){ cin.tie(0); ios::sync_with_stdio(0); int n; cin>>n; set se; int a[130]; for(int i=0;i >a[i]; sort(a,a+n); cout<=0;i--){ if(se.count(a[i])==0&&a[n-1]%a[i]==0){ se.insert(a[i]); } else if(se.count(a[i])==1&&a[n-1]%a[i]==0){ cout< 1612B - Special Permutation
点击打开题目
题目大意:
长度为n的置换是一个数组p=[p1,p2,…,pn],其中包含从1到n(包括1到n)的每个整数,且只包含一次。例如,p=[4,2,6,5,3,1]是长度为6的置换。
给你三个整数n,a和b,其中n是偶数。打印长度为n的任何排列,左半部分所有元素中的最小值等于a,右半部分所有元素中的最大值等于b。如果不存在这种排列,请打印-1。
题目思路:构造题,分别定义两个数组构造两个部分,先考虑b的,再考虑两数之间的。
AC代码:
#includeusing namespace std; #define pb push_back int main(){ cin.tie(0); ios::sync_with_stdio(0); int tc; cin>>tc; label: while(tc--){ int n,a,b; cin>>n>>a>>b; vector l; vector r; l.pb(a); r.pb(b); for(int i=1;i<=n;i++){ if(i!=a&&i!=b){ if(ib){ cout<<-1< n/2||l.size()>n/2){ cout<<-1<



