CF252A:
前缀和的练手题,具体思路:
1,把所有数输入。
2,把所有区间的和求出来。
3,求一下那个区间异或和最大,并存给ANS。
4,输出ANS。
代码如下:
// luogu-judger-enable-o2 #include <iostream>//头文件 using namespace std; int a[105],s[105];//定义两个数组A用来输入,S用来存储异或和 int main() { int n,ans=-1e9;//ANS是答案 cin>>n;//输入一下N for(int i=1;i<=n;i++) cin>>a[i];//输入那几个数 s[1]=a[1];//S数组的第一个永远都是A数组的一个 for(int i=2;i<=n;i++) s[i]=a[i]^s[i-1];//把异或求出来 for(int i=1;i<=n;i++) { for(int j=i;j<=n;j++) { ans=max(ans,s[j]^s[i-1]);//把最大的异或和存下来 } } cout<<ans;//输出异或和 return 0;//结束 }A
珍惜生命,远离抄袭。。。
CF62A:
题意懂了就可以开始做题了,只要按题面规则模拟就可以,只要读懂题就行,没什么可以说的:
#include <iostream>//头文件 using namespace std;//常规 int main()//主函数 { int a,b,c,d;//定义手指 cin>>a>>b>>c>>d;//输入手指根数 if((a*2+3>d&&d+1>=a)||(b*2+3>c&&c+1>=b))//判断有两种情况,每种情况里又有两种小情况,只要满足两种小情况就行(题意说了) cout<<"YES";//输出 else//不符合要求 cout<<"NO";//输出 return 0;//结束 }
CF466A:
其实这道题并没有我想像的那么难,我最初看题以为是一个动态规划的题,后来发现只需要简单的模拟即可,并不用什么太难的算法,于是我就放心,12行代码就过了。
言归正传
本题思路其实也很简单,只需要简单的判断一下是买a卢布一张,可以搭一次地铁的和b卢布一张,可以搭m次地铁这两种票那种票便宜即可连循环都不用写。
首先咱们来看那种票单价便宜,便宜很明显,第一种票单价就是a,而第二种票单价为b/m,所以只要判断哪个低就买那个。如果第一种便宜就直接输出a×n(买n张为a元的票总价就是a×n)而第二种就稍微复杂一点,第二种票价很显然是n/m×b,但还会剩n%m次车,所以还要加上b,但这不一定是对的,因为还有第一种票呢,如果第一种票的价钱×n%m小于b,那么第一种就便宜,所以去一个最小值即可就MIN(iostream里自带的)。
好了有了概念就来敲代码吧:
#include <iostream>//头文件 using namespace std;//常规 int main()//主函数 { int n,m,a,b;//一行四个整数:n,m,a,b,代表的数请看题意 cin>>n>>m>>a>>b;//输入 if(float(b/m)>=a)//判断那种便宜 cout<<a*n;//如果第一种便宜就输出a×n else//其他情况 cout<<n/m*b+min(b,n%m*a);//第二种票价怎么计算前面说了,就是n/m*b+min(b,n%m*a),输出就行了 return 0;//华华丽丽的结束 }
请大家在看题解前自己思考,那样才能获得真正的知识!!!