AtCoder Beginner Contest 198 游记
次阅读
3 min read
PB 了。
A
水题
B
水题
C
给定坐标 , 每次只能跳 , 从 跳到其要多少?
稍加观察就可以发现,就是距离除一下然后上取整就好了,因为越过的直接把前面一个弯一下就即可。
然后顺利地 WA 了。
一直以为是精度问题,最后发现是一次就跳到的要特判。
WA 了 次,罚时吃饱。
#include <cstdio>
#include <cmath>
int r, x, y;
int main() {
scanf("%d%d%d", &r, &x, &y);
double dis = sqrt((double)x*x + (double)y*y);
double ans = ceil(dis / (double)r);
if(ans == 1 && ceil(dis / (double)r) != floor(dis / (double)r)) ans++;
printf("%.0lf", ans);
}
D
一看数据范围,直接搜索就可以了。
#include <cstdio>
#include <cstring>
#include <cstdlib>
#define int long long
char s[4][15];
int len[4], num[256];
bool vis[15];
void dfs(int l, int t, int n1, int n2, int n3) {
if(l == 3 && t > len[3]) {
if(n1 + n2 == n3) {
printf("%lld\n%lld\n%lld", n1, n2, n3);
exit(0);
}
return;
}
if(t > len[l]) {
dfs(l+1, 1, n1, n2, n3);
return ;
}
if(num[s[l][t]] != -1) {
if(l == 1) dfs(l, t+1, n1*10+num[s[l][t]], n2, n3);
if(l == 2) dfs(l, t+1, n1, n2*10+num[s[l][t]], n3);
if(l == 3) dfs(l, t+1, n1, n2, n3*10+num[s[l][t]]);
return ;
}
for(int i = 0; i <= 9; i++) {
if(t == 1 && i == 0) continue;
if(vis[i]) continue;
num[s[l][t]] = i;
vis[i] = 1;
if(l == 1) dfs(l, t+1, n1*10+i, n2, n3);
if(l == 2) dfs(l, t+1, n1, n2*10+i, n3);
if(l == 3) dfs(l, t+1, n1, n2, n3*10+i);
vis[i] = 0;
num[s[l][t]] = -1;
}
}
signed main() {
scanf("%s%s%s", s[1]+1, s[2]+1, s[3]+1);
for(int i = 1; i <= 3; i++)
len[i] = strlen(s[i]+1);
memset(num, -1, sizeof num);
dfs(1, 1, 0, 0, 0);
printf("UNSOLVABLE");
return 0;
}
E
今天 E 那么水???
达成 PB, Rank 575, 本来还可以更高的。