昨天晚上第一次参加CF,提交成功两个题,排名5520.↵
↵
[standings:1257]↵
[problem:1257A]↵
[problem:1257B]↵
[problem:1257C]↵
↵
实际我们完成了第三题,但是并未成功长传。↵
A:很简单的意思,结果两种可能,l — r或者b — a + x。↵
~~~~~↵
↵
#include <cstdio>↵
#include <cmath>↵
using namespace std;↵
int main(){↵
int t,n,x,a,b,c,d,e;↵
scanf("%d",&t);↵
while(t--){↵
scanf("%d%d%d%d",&n,&x,&a,&b);↵
c= abs(a-b);↵
d=x+c;↵
if(d>=n)↵
printf("%d\n",n-1);↵
else↵
printf("%d\n",d);↵
} ↵
return 0;↵
}↵
↵
~~~~~↵
↵
B:题意不作解释。最后结果:只要m>=4,就能达到任何值。m = 3时,只能达到1,2,3;m = 2时,只能达到1,2,3;m = 1时,只能是1.↵
↵
~~~~~↵
↵
#include<stdio.h>↵
int m,n;↵
int flag = 1;↵
int T;↵
int main(){↵
scanf("%d",&T);↵
while(T--){↵
scanf("%d%d",&m,&n);↵
flag = 1;↵
if(m >= 4) flag = 0;↵
if(m == 3 && n <= 3) flag = 0;↵
if(m == 2 && n <= 3) flag = 0;↵
if(m == 1 && n == 1) flag = 0; ↵
if(flag) printf("NO\n");↵
else printf("YES\n");↵
}↵
return 0;↵
} ↵
~~~~~↵
↵
C:C最坑在题意,找一个最短的首尾相同的字串长度就行了,找不到返回-1.刚开始想的用优先队列,wa4,后来直接每一次判断:↵
↵
~~~~~↵
↵
#include<string.h>↵
#include<stdio.h>↵
#include<algorithm>↵
using namespace std;↵
#define maxn 200005↵
int ll[maxn];↵
int main(){↵
int T;↵
scanf("%d",&T);↵
while(T--){↵
int n;↵
scanf("%d",&n);↵
int num;↵
memset(ll,0,sizeof(ll));↵
if(n < 2) {↵
for(int i = 0;i < n;i++){↵
scanf("%d",&num);↵
}↵
printf("-1\n");↵
}↵
else{↵
int ans = 1e9;↵
for(int i = 1;i <= n;i++){↵
scanf("%d",&num);↵
if(ll[num] == 0) ll[num] = i;↵
else {↵
ans = min(ans,i — ll[num] + 1);↵
ll[num] = i;↵
}↵
}↵
if(ans == 1e9){↵
printf("-1\n");↵
}↵
else{↵
printf("%d\n",ans);↵
}↵
}↵
}↵
return 0;↵
}↵
↵
~~~~~↵
↵
↵
第一次就写这么多了,好好学习,天天向上!!!↵
↵
↵
↵
↵
↵
↵
[standings:1257]↵
[problem:1257A]↵
[problem:1257B]↵
[problem:1257C]↵
↵
实际我们完成了第三题,但是并未成功长传。↵
A:很简单的意思,结果两种可能,l — r或者b — a + x。↵
~~~~~↵
↵
#include <cstdio>↵
#include <cmath>↵
using namespace std;↵
int main(){↵
int t,n,x,a,b,c,d,e;↵
scanf("%d",&t);↵
while(t--){↵
scanf("%d%d%d%d",&n,&x,&a,&b);↵
c= abs(a-b);↵
d=x+c;↵
if(d>=n)↵
printf("%d\n",n-1);↵
else↵
printf("%d\n",d);↵
} ↵
return 0;↵
}↵
↵
~~~~~↵
↵
B:题意不作解释。最后结果:只要m>=4,就能达到任何值。m = 3时,只能达到1,2,3;m = 2时,只能达到1,2,3;m = 1时,只能是1.↵
↵
~~~~~↵
↵
#include<stdio.h>↵
int m,n;↵
int flag = 1;↵
int T;↵
int main(){↵
scanf("%d",&T);↵
while(T--){↵
scanf("%d%d",&m,&n);↵
flag = 1;↵
if(m >= 4) flag = 0;↵
if(m == 3 && n <= 3) flag = 0;↵
if(m == 2 && n <= 3) flag = 0;↵
if(m == 1 && n == 1) flag = 0; ↵
if(flag) printf("NO\n");↵
else printf("YES\n");↵
}↵
return 0;↵
} ↵
~~~~~↵
↵
C:C最坑在题意,找一个最短的首尾相同的字串长度就行了,找不到返回-1.刚开始想的用优先队列,wa4,后来直接每一次判断:↵
↵
~~~~~↵
↵
#include<string.h>↵
#include<stdio.h>↵
#include<algorithm>↵
using namespace std;↵
#define maxn 200005↵
int ll[maxn];↵
int main(){↵
int T;↵
scanf("%d",&T);↵
while(T--){↵
int n;↵
scanf("%d",&n);↵
int num;↵
memset(ll,0,sizeof(ll));↵
if(n < 2) {↵
for(int i = 0;i < n;i++){↵
scanf("%d",&num);↵
}↵
printf("-1\n");↵
}↵
else{↵
int ans = 1e9;↵
for(int i = 1;i <= n;i++){↵
scanf("%d",&num);↵
if(ll[num] == 0) ll[num] = i;↵
else {↵
ans = min(ans,i — ll[num] + 1);↵
ll[num] = i;↵
}↵
}↵
if(ans == 1e9){↵
printf("-1\n");↵
}↵
else{↵
printf("%d\n",ans);↵
}↵
}↵
}↵
return 0;↵
}↵
↵
~~~~~↵
↵
↵
第一次就写这么多了,好好学习,天天向上!!!↵
↵
↵
↵
↵
↵