前言
今天一早就起床了,洗漱好后,便和宿友们一起去饭堂吃汤粉去了(真好吃)······
今天做了四道题
第一题
题目大意
你的任务是计算在1至n内的正整数,有多少正整数是“合法”的?
所谓的“合法”是指:该整数属于上面给定的等差数列的某项或者属于等比数列的某项,或者既属于等差数列的项也属于等比数列的项…
输入样例
1 1 1 2 1000
输出样例
1000
解题思路
这道题目其实就是模拟加暴力
然后就判断一下特殊的情况即可
程序如下
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
long long a,b,c,d,n,ans;
int main()
{
freopen("shulie.in","r",stdin);
freopen("shulie.out","w",stdout);
scanf("%lld%lld%lld%lld%lld",&a,&b,&c,&d,&n);
if(d!=1)//如果d等于1的话,乘起来就没意思了 还浪费空间
{
for(long long i=c;i<=n;i*=d)//不断相乘
if(i<a||(i-a)%b!=0)
{
ans++;
}
}
else
if((c-a)%b!=0&&c<=n||(c<a)&&c<n)
{
ans=1;
}
if(n>=a)
{
ans+=(n-a)/b+1;
}
printf("%lld",ans);
fclose(stdin);
fclose(stdout);
return 0;
}
第二题
题目大意
在二维平面坐标轴里面,有N只蚂蚁,第i只蚂蚁所在的点的坐标是(xi, yi),坐标都是整数。所有蚂蚁的移动速度都相等,都是每秒移动1个单位。每只蚂蚁都有一个固定的移动方向,是如下4种方向之一,都是平行于坐标轴的
N表示向北(即朝上)
l E表示向东(即朝右)
l S表示向南(即向下)
l W表示向西(即向左)
当2只或多只蚂蚁在某个时刻碰撞到一起,那么这些蚂蚁都会立即消失。当所有的碰撞结束后,还有多少只蚂蚁存在?
输入样例
4
NWNE
0 0
10 10
20 20
30 30
输出样例
2
解题思路
这道题要注意一个点就是你枚举的时候要0.5的不断加,因为要避免一些特殊情况
第三题
题目大意
现在你的任务是:有多少种不同的选择方案,使得“费用”不小于给定的数min,而且不大于给定的数max,即“费用”在范围内有多少种不同的选择方案。答案模1000000007。所谓的两种不同方案是指:只要它们选中的单元格有一个不同,就认为是不同的方案。
输入样例
3 3 1 20000
输出样例
6
第四题
题目大意
(1)每棵小草都长高了,第i棵小草长高的高度是grow[i]。
(2)Bessie选择其中一棵小草并把它剪平,这棵小草高度变为0。注意:这棵小草并没有死掉,它下一秒还会生长的。
(3)Bessie计算一下这N棵小草的高度总和,如果不超过H,则完成任务,一切结束, 否则轮到下一时刻。
你的任务是计算:最早是第几时刻,奶牛Bessie能完成它的任务?如果第0时刻就可以完成就输出0,如果永远不可能完成,输出-1,否则输出一个最早的完成时刻。
输入样例
3 16
5 8 58
2 1 1
输入样例
1