HDU---2018 Multi-University Training Contest 2

36 篇文章 0 订阅
9 篇文章 0 订阅

1004:Game

题意:n个数。每次取出一个数,删掉其因子,A先手,两人游戏,最优选择,输出A能否胜利。

思路:答案很扯。。一定是Yes。。。晚上看了直播,看2--n,若先手必胜,就取正常取,1一定被第一步被取掉,不然就取1,结果一定是Yes

代码:

#include<iostream>
using namespace std;
int main()
{
  int n;
  while(cin>>n)
  {
      cout<<"Yes"<<endl;
  }
}

1005  Hack It

题意:题意给了代码,要求找出代码错误样例,就是给出一个二维矩阵,0,1组成,要不少于85000个1组成,的,k^2维的,1<=k<=n,

思路:比赛的时候退了半天,,,失败了,,,题解没听明白。。。明天上午补

1007 Naive Operations

题意:给定数组b,a数组初始都是0,,q次查询,add【l,r】,区间值都+1,query【l,r】查询区间内所有a【i】/b【i】,的和

思路:比赛的时候想好久,但是没做出来,最后的时候又大佬A了,分享了思路,真是6666,就是把a数组初始赋值为b的,然后add区间,就将区间数值都-1,一旦出现0,就将0的数恢复成b数组内的值,然后对应的比值就会+1,两个线段树维护,,一个维护add,,一个维护query。。就可以了。。代码明天补。

代码:

 

1010  Swaps and Inversions

题意:n个数组成的序列,每存在一对逆序数花费x元,可以任意交换一对相邻的数,花费y元,,

思路:因为每一次交换,因为是相邻的,所以每次交换最多并且只能减少一堆逆序数,所以就是逆序数*min(x,y)

做题的时候思路倒是想的挺快!但事WA了,补了long long后,RE了!!完全找不出错误。。。然后队友重做的!!后来把自己RE的代码数组+100空间就A了,,,,,真的是。。。

代码:

#include<bits/stdc++.h>
using namespace std;
int a[100105],n,x,y;
long long ans;
struct AA
{
    int x,num,now;
}pos[100105];
bool cmp(AA aa,AA bb)
{
    return aa.x<bb.x;
}
bool cmpp(AA aa,AA bb)
{
    return aa.num<bb.num;
}
int lowbit(int i)
{
    return i&(-i);
}
void add(int i)
{
    while(i<=n)
    {
        //cout<<i<<endl;
        a[i]++;
        i+=lowbit(i);
    }
}
int sum(int i)
{
    int s=0;//cout<<i<<endl;
    while(i>0)
    {

        s+=a[i];
        i-=lowbit(i);
    }
    return s;
}
int main()
{
    while(~scanf("%d%d%d",&n,&x,&y))
    {
        memset(a,0,sizeof(a));
        ans=0;
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&pos[i].num);
            pos[i].x=i;
        }
        sort(pos+1,pos+1+n,cmpp);
        int k=1;
        pos[1].now=1;
        for(int i=2;i<=n;i++)
        {
            if(pos[i].num==pos[i-1].num) pos[i].now=k;
            else pos[i].now=++k;
        }
        sort(pos+1,pos+1+n,cmp);
        for(int i=1;i<=n;i++)
        {
            add(pos[i].now);
            ans+=i-sum(pos[i].now);
        }
        cout<<ans*(long long)min(x,y)<<endl;
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值