Codeforces Round #709 (Div. 2, based on Technocup 2021 Final Round)(A~B)
A.Prison Break
如果有m*n个小房间,那么就有m*n个房间需要被打破,即每个房间至少要有一堵墙被打破。根据观察得出也不能是同一堵墙,故为m*n面墙需要被打破
AC代码如下:
#include<bits/stdc++.h> using namespace std; typedef long long ll; int t; int main(){ scanf("%d",&t); while(t--){ int a,b; scanf("%d%d",&a,&b); printf("%d\n",a*b); } return 0; }
B.Restore Modulo
先记录前两个相邻的数之间的差值为c。那么当后面出现两个相邻的数之间的差值和c不同且和c同号时,就不可能构成这个序列。若后面存在一个相邻差值和c不同但和c异号且此时m未定义过。则将m定义为abs(c)+abs(差值)。例如序列1,4,2.的差值分别为3和-2.那么m就为5,同时c(输出的答案)为3.因此这个序列存在的要求就是后面的差和c相等且同号或者异号时m未定义或者异号时差和c的绝对值的和等于m。如果没办法确切的求出m的值但是差值满足要求,那么m可以取任意值。输出0。如果不满足上述要求直接输出-1即可.最后需要注意下输出答案时需要判断下c是否为负。为负的话需要进行m-abs(c)这个操作后才是答案所要求的c的值。
AC代码如下:
#include<bits/stdc++.h> #define MAXN 100005 using namespace std; typedef long long ll; int t,n,a[MAXN]; int main(){ scanf("%d",&t); while(t--){ scanf("%d",&n); int m=-1,c=1e9+5,flag=1,max1=-1; for(int i=0;i<n;i++){ scanf("%d",&a[i]); if(a[i]>max1) max1=a[i]; } if(n<3) printf("0\n"); else{ for(int i=0;i<n-1;i++){ int temp=a[i+1]-a[i]; if(temp>=0){//如果差值大于0 if(c==1e9+5)//如果c没更新过,就更新c。这样就固定了差值 c=temp; else if(c<0&&m==-1){//如果c和temp异号,就可以求出m的值 m=abs(c)+temp; if(m<=max1){//如果m小于最大值,则不可能 printf("-1\n"); flag=0; break; } }else if(c>=0&&m==-1){//如果c和temp同号,且m的值未求出来 if(c==temp) continue; else{//如果c和temp不一样,就不行 printf("-1\n"); flag=0; break; } }else if(c>=0){//如果c和temp一样且m的值已经求出来了 if(c!=temp){ flag=0; printf("-1\n"); break; } }else if(c<0){//如果c和temp不一样且m的值已经求出来了 if((m-abs(c))!=temp){ flag=0; printf("-1\n"); break; } } }else if(temp<0){//如果差值小于0 if(c==1e9+5)//如果c没更新过 c=temp; else if(c>0&&m==-1){//如果c更新过了且m未更新过且c和temp异号 m=c+abs(temp); if(m<=max1){//如果m小于最大的 printf("-1\n"); flag=0; break; } }else if(c<0&&m==-1){ if(c==temp) continue; else{ printf("-1\n"); flag=0; break; } }else if(c==0&&m==-1){ printf("-1\n"); flag=0; break; }else if(c<0){ if(c!=temp){ flag=0; printf("-1\n"); break; } }else if(c>=0) if((m-c)!=abs(temp)){ flag=0; printf("-1\n"); break; } } } if(flag) if(m==-1) printf("0\n"); else printf("%d %d\n",m,c>0?c:m-abs(c)); } } return 0; }

浙公网安备 33010602011771号