2020 杭电多校第八场(2020 Multi-University Training Contest 8)

1003 Clockwise or Counterclockwise

2020 杭电多校第八场(2020 Multi-University Training Contest 8)_第1张图片

思路:

 刚开始不知道叉乘是啥(数学太水了)

如果两个向量的方向 是顺时针的,那么这两个向量的叉乘乘积小于0;反之逆时针大于0;

下图为顺时针示例

2020 杭电多校第八场(2020 Multi-University Training Contest 8)_第2张图片

#include
using namespace std;
const int N =2e5+10;
typedef long long ll;
int main()
{
    ll t,x1,x2,x3,y1,y2,y3;
    cin>>t;
    while(t--)
    {
        cin>>x1>>y1>>x2>>y2>>x3>>y3;
        ll a=x2-x1;ll b=y2-y1;
        ll c=x3-x1;ll d=y3-y1;
        if(1ll*a*d-1ll*b*c<0)
            cout<<"Clockwise"<

1006  Fluctuation Limit

2020 杭电多校第八场(2020 Multi-University Training Contest 8)_第3张图片

 思路:

刚开始把股票的价格的范围看成特定值了,白白T了六七发.... 

保证每一天股票的价格和预测的价格区间不冲突 

 首先每一天要取股票可能的价格区间和预测价格的区间最小值;比如第i-1天股票价格可能为  [l,r]  ,  预测价格为 [L,R] 

那么第i天的股票价格范围就是:[ min(l-k,L) , min(r+k,R)  ];根据这种递推关系,依次求出每一天的价格区间即可;

输出价格的时候,可以从最后一天开始计算,依次取区间最大值,如果第i天取res,如果第i-1天的右端点>=res+k,那么第i-1天

就取res+k,否则就取第i-1天的右端点即可;

#include

using namespace std;

const int N =1e5+10;

long long l[N],r[N];
long long ll[N],rr[N],a[N];
int main()
{
    ios::sync_with_stdio(false);
    int t;
    cin >>t;
    while(t--)
    {
        int n,k;
        cin >>n>>k;
        for(int i=1;i<=n;i++) cin >>l[i]>>r[i];
//        int ll=l[1]-1,rr=r[0]+1;
        ll[1]=l[1],rr[1]=r[1];
        int flag=1;
        for(int i=2;i<=n;i++)
        {
            ll[i]=max(l[i],ll[i-1]-k);
            rr[i]=min(r[i],rr[i-1]+k);
            //cout <rr[i])
            {
                flag=0;
                break;
            }
        }
        if(flag==1) 
        {
//                long long res=rr[n];a[n]=res;
                int f=0;
                for(int i=n-1;i>=1;i--)
                {
                    if(rr[i+1]+k<=rr[i]) rr[i]=rr[i+1]+k;
                }
            cout <<"YES"<

 

你可能感兴趣的:(基础算法——数论,#,计算几何,#,差分约束)