由于比赛延期了一个星期,今天才打,恰巧我记错了时间,本来是8:00, 我记成9:00,
然后·········
幸运的是我还是把前四题做出来了 (in twenty minutes),由于时间问题,我成功的排在4000多名的地方,我可怜的rating.........
这次比赛前四道都会,后四道都知道在考什么, 我都没学过
Task 1:Horizon
题意:求 \(\sqrt{(x*(12800000 + x))}\)
solution: 直接求, Code
#include<iostream>
#include<cstdio>
#include<cmath>
#include<vector>
#include<queue>
using namespace std;
double h;
int main(){
cin >> h;
printf("%.7lf", sqrt(h * (h + 12800000)));
return 0;
}
Task 2:Integer Division
题意:求\(x \div 10\)下取整, x为long long 类型
solution:如果负数,最后一位不为零,输出x / 10 - 1, 否则输出x / 10
如果为整数,输出x / 10, 我好像想的有点多了
Code:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<vector>
#include<queue>
using namespace std;
#define ll long long
ll x;
int main(){
cin >> x;
int d = x % 10;
if(x < 0){
if(d != 0)
cout << x / 10 - 1;
else
cout << x / 10;
}
else{
cout << x / 10;
}
return 0;
}
Task 3:Knight Fork
题意:给出两个点的坐标,是否存在一个点与这两个点的距离都为根号5
solution:暴力枚举出与这两个点距离为根号5的所有点,看一下是否有相同的
Code
#include<iostream>
#include<cstdio>
#include<cmath>
#include<vector>
#include<queue>
using namespace std;
int px, py, dx, dy;
int x[8], y[8];
int fx[8], fy[8];
int xx[8] = {1, 2, 2, 1, -1, -2, -2, -1}, yy[8] = {-2, -1, 1, 2, 2, 1, -1, 2};
int main(){
cin >> px >> py >> dx >> dy;
for(int i = 0; i < 8; i++)
x[i] = px + xx[i], y[i] = py + yy[i];
for(int i = 0; i < 8; i++)
fx[i] = dx + xx[i], fy[i] = dy + yy[i];
for(int i = 0; i < 8; i++)
for(int j = 0; j < 8; j++)
if(x[i] == fx[j] && y[i] == fy[j]){
cout << "Yes";
return 0;
}
cout << "No";
return 0;
}
Task 4:Prime Sum Game
题意:两个人玩游戏,第一个人从A-B中选一个数字,第二个人从C-D中选一个数字,若两个数字和为指数,后手胜,否则先手胜,当两人都拿出最好水平时谁会赢?
solution:由于范围只有100,暴力循环A-B,若有一种情况后手无法凑成质数,先手赢,否则后手赢
Code:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<vector>
#include<queue>
using namespace std;
bool isP(int x){
if(x <= 1)return false;
for(int i = 2; i * i <= x; i++)
if(x % i == 0)return false;
return true;
}
int main(){
int a, b, c, d, p1 = 0, p2 = 0;
cin >> a >> b >> c >> d;
for(int i = a; i <= b; i++){
bool f = false;
for(int j = c; j <= d; j++){
if(isP(i + j)){
f = true;
break;
}
}
if(f)p2++;
else p1++;
}
if(p1 != 0)
cout << "Takahashi";
else
cout << "Aoki";
return 0;
}
剩下四题就很......
Task 5:好像是树链剖分+主席树,可惜我主席树不好
Task 6:好像是连通块还是什么,我的图论真差
Task 7:还是图论QWQ......
Task 8:期望.......
总结:前四题发挥很好,后四题还是一道不会.........
回去要补一下图论和主席树了