Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- using namespace std;
- FILE *fin = fopen("mere.in","r");
- FILE *fout = fopen("mere.out","w");
- struct App {
- int x, y, z, r;
- }Apple[203];
- int N, Fallen[203], Answer, Down = 10002;
- void Fall(int App_nr);
- int Distance(App A, App B);
- int main() {
- fscanf(fin, "%d\n", &N);
- for(int i = 1; i <= N; ++i) {
- fscanf(fin, "%d %d %d %d\n", &Apple[i].x, &Apple[i].y, &Apple[i].z, &Apple[i].r);
- Down = (Down > Apple[i].z ? Apple[i].z : Down);
- }
- Fallen[1] = 1;
- Fall(1);
- for(int i = 1; i <= N; ++i) {
- Answer += Fallen[i];
- }
- fprintf(fout, "%d\n", Answer);
- fclose(fin);
- fclose(fout);
- return 0;
- }
- void Fall(int App_nr) {
- while(Down <= Apple[App_nr].z) {
- for(int i = 1; i <= N; ++i) {
- if(App_nr != i && Fallen[i] == 0 && Apple[App_nr].z == Apple[i].z) {
- if(Distance(Apple[i], Apple[App_nr]) <= (Apple[App_nr].r + Apple[i].r) * (Apple[App_nr].r + Apple[i].r)) {
- Fallen[i] = 1;
- Fall(i);
- }
- }
- }
- --Apple[App_nr].z;
- }
- }
- int Distance(App A, App B) {
- return (A.x - B.x) * (A.x - B.x) + (A.y - B.y) * (A.y - B.y);
- }
Advertisement
Add Comment
Please, Sign In to add comment