zoukankan      html  css  js  c++  java
  • 【思维题】AGC013C

    妙妙技巧题

    题目描述

    题目大意

    一个圆环上有n只蚂蚁,它们会按照顺时针或者逆时针行走。如果有蚂蚁相遇它们就会掉头(不一定在整数时间掉转)。问最后每只蚂蚁的位置。

    题目分析

    以前在luogu上做过一道类似的掉头问题,于是考试时候就很大意地把它压在最后做了……

    我们考虑一下,这n只蚂蚁的相对位置其实是不会改变的,并且我们可以算出最终所有蚂蚁的位置。

    那应该如何计算第一只蚂蚁最后的顺序呢?

    想象在n-1到0之间有一只哨兵蚂蚁,它是不会移动的。当有蚂蚁从左边或右边穿过它的时候,我们的一号蚂蚁相当于次序+1或-1了。

    再就是细节问题:$(a[i]\%l)<0$时,意味着这只蚂蚁从右边向左边运动后,还少了一次+l,所以注意在这个地方特别处理一下就好了。

     1 #include<bits/stdc++.h>
     2 const int maxn = 100035;
     3 
     4 int a[maxn],n,l,t,x,cnt;
     5 
     6 int main()
     7 {
     8     scanf("%d%d%d",&n,&l,&t);
     9     for (int i=1; i<=n; i++)
    10     {
    11         scanf("%d%d",&a[i],&x);
    12         a[i] += x==1?t:-t;
    13         cnt += a[i]/l;
    14         if (a[i]%l<0) cnt--;        //就是这里细节的处理
    15         ((a[i]%=l)+=l)%=l;
    16     }
    17     std::sort(a+1, a+n+1);
    18     ((cnt%=n)+=n)%=n;
    19     // for (int i=1; i<=n; i++) printf("%d
    ",a[i]);
    20     for (int i=cnt+1; i<=n; i++) printf("%d
    ",a[i]);
    21     for (int i=1; i<=cnt; i++) printf("%d
    ",a[i]);
    22     return 0;
    23 }

    END

  • 相关阅读:
    接口-DAO模式代码阅读及应用
    3.1-有理数类的设计

    树、二叉树、查找算法总结
    编辑器、编译器、文件、IDE等常见概念辨析
    二叉排序树
    markdown的一些语法
    数据结构小结(线性表)
    springMVC model传对象数组 jq 获取
    java.sql.SQLException: Data truncated for column 'lastSeason' at row 1
  • 原文地址:https://www.cnblogs.com/antiquality/p/9102470.html
Copyright © 2011-2022 走看看