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;
}
}