扶苏在玩一款名叫第五暖暖的游戏。
扶苏在游戏中的角色有一个被称为「精神力」的属性,初始时,这一属性为 x 0 x_0 x0。
扶苏的仓库里有 n n n 件挂件,对于第 i i i 件挂件,只有当人物的精神力不低于 a i a_i ai 时才能装备该挂件,装备该挂件后,人物的精神力会增加 b i b_i bi。
现在,扶苏希望按照从 1 1 1 到 n n n 的顺序依次尝试装备每件挂件。策略是:当尝试装备某件挂件时,如果满足装备该挂件的条件(也就是人物的精神力不低于 a i a_i ai),则装备该挂件(此时人物的精神力会增加 b i b_i bi);否则不装备该挂件,以后也不再考虑该挂件。
请你求出,扶苏一共装备了几件挂件。
第一行是两个整数,表示挂件数量 n n n 和初始的精神力 x 0 x_0 x0。
第二行有 n n n 个整数,第 i i i 个整数表示装备挂件 i i i 最少需要的精神力值 a i a_i ai。
第三行有 n n n 个整数,第 i i i 个整数表示装备挂件 i i i 后增加的精神力值 b i b_i bi。
输出一行一个整数,表示扶苏装备的挂件数量。
3 1
1 3 2
1 1 1
2
初始扶苏的精神力为 1 1 1。
她开始考虑第一件挂件,装备第一件挂件需要的精神力不低于 1 1 1,符合要求,故她装备了第一件挂件,精神力增加 1 1 1,变成 2 2 2。
考虑第二件挂件,要求精神力不低于 3 3 3,不符合条件,于是不装备该挂件。
考虑第三件挂件,要求精神力不低于 2 2 2,此时精神力是 2 2 2,符合要求,故装备该挂件,精神力增加 1 1 1,变成 3 3 3。
需要注意的是,虽然此时已经可以装备第二件挂件,但是第二件挂件已经被考虑过了,所以我们不再尝试装备上它。
最终,扶苏装备了两件挂件。
By 一扶苏一
依题意模拟。
#include
using namespace std;
long long n,x,a[100100],b[100100],ans=0;
int main()
{
cin>>n>>x;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++) cin>>b[i];
for(int i=1;i<=n;i++)
{
if(x>=a[i])
{
x+=b[i];
ans++;
}
}
cout<<ans;
return 0;
}
在第五人格巅峰七阶及以上的排位赛中,需要进行区域选择。我们将在本题中形式化、推广化的解决区域选择问题。
在地图中,共有 n n n 台密码机,第 i i i 台密码机的坐标为 ( x i , y i ) (x_i,y_i) (xi,yi)。在推广化的游戏中,有 k k k 名求生者。每名求生者可以选择一台密码机作为其出生点,我们称被选择的密码机为 出生密码机。
监管者共有 T T T 个出生点可供选择。第 i i i 个可能的出生点坐标为 ( x i , y i ) (x_i,y_i) (xi,yi)。此时,由于“封禁”天赋的存在,离监管者最远的密码机将不能被破译。
如果多台密码机与监管者的距离相同且最远,“封禁”天赋将会封禁这几台密码机中标号最小的那一台。
请问在该 T T T 个出生点中,有多少出生点,可以使某一台 出生密码机 被封禁。
请注意:坐标点 ( x 1 , y 1 ) (x_1,y_1) (x1,y1) 与坐标点 ( x 2 , y 2 ) (x_2,y_2) (x2,y2) 之间的距离为 ( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 \sqrt{(x_1-x_2)^2+(y_1-y_2)^2} (x1−x2)2+(y1−y2)2。
输入共 n + T + k + 1 n+T+k+1 n+T+k+1 行。
输入的第一行为三个整数 n , k , T n,k,T n,k,T。
接下来 n n n 行,每行两个整数 x i , y i x_i,y_i xi,yi,表示一台密码机的坐标。
接下来 k k k 行,每行两个整数 x i , y i x_i,y_i xi,yi,表示一名求生者选择出生密码机的坐标,保证该坐标在上面出现过。
接下来 T T T 行,每行两个整数 x i , y i x_i,y_i xi,yi,表示监管者的一个出生点。
输出一行一个整数,为答案。
4 2 2
-1 0
0 -1
2 0
0 2
-1 0
0 2
3 0
0 0
1
【样例 #1 解释】
显然,第一台密码机和第四台密码机为出生密码机。
第一位监管者与位置在 ( − 1 , 0 ) (-1, 0) (−1,0) 的第一台密码机距离最远,为 4 4 4。因此,第一台密码机被封禁。
第二位监管者与位置在 ( 2 , 0 ) , ( 0 , 2 ) (2, 0), (0, 2) (2,0),(0,2) 的第三、四台密码机距离相同且最远,为 2 2 2。根据上面提到的规则,第三台密码机被封禁。
被封禁的出生密码机为 1 1 1 台。
【数据规模与约定】
对前 10 % 10\% 10% 的数据,保证 n = k = 1 n = k = 1 n=k=1。
对前 20 % 20\% 20% 的数据,保证 n , k , t ≤ 10 n, k, t \leq 10 n,k,t≤10。
对另外 20 % 20\% 20% 的数据,保证密码机与出生点的坐标中的 x x x 均为 0 0 0。
对另外 10 % 10\% 10% 的数据,保证 n = k n = k n=k。
对另外 10 % 10\% 10% 的数据,保证 T = 1 T = 1 T=1。
对于 100 % 100\% 100% 的数据范围 1 ≤ k ≤ n ≤ 1 0 3 , 1 ≤ T ≤ 1 0 3 , 1 ≤ ∣ x i ∣ , ∣ y i ∣ ≤ 1 0 3 1 \le k \le n \le 10^3, 1 \le T \le 10^3, 1 \le |x_i|,|y_i| \le 10^3 1≤k≤n≤103,1≤T≤103,1≤∣xi∣,∣yi∣≤103。
用结构体来做。结构体数组里的每个数表示每个密码机,定义 x , y , e x,y,e x,y,e, x , y x,y x,y 表示坐标, e e e 是 b o o l bool bool 类型的,表示这个密码机是否为出生密码机。
剩下依题意模拟。
#include
using namespace std;
long long n,k,t,ans=0;
struct mm
{
int x,y;
bool e;
}a[1100];
double jl(int a,int b,int a2,int b2)
{
return sqrt(((a-a2)*(a-a2)+(b-b2)*(b-b2))*1.0);
}
int main()
{
cin>>n>>k>>t;
for(int i=1;i<=n;i++) cin>>a[i].x>>a[i].y;
for(int i=1;i<=k;i++)
{
int xx,yy;
cin>>xx>>yy;
for(int j=1;j<=n;j++)
{
if(xx==a[j].x&&yy==a[j].y)
{
a[j].e=true;
break;
}
}
}
for(int i=1;i<=t;i++)
{
int xx,yy;
cin>>xx>>yy;
double maxx=-1;
int f=0;
for(int j=1;j<=n;j++)
{
if(jl(xx,yy,a[j].x,a[j].y)>maxx)
{
maxx=jl(xx,yy,a[j].x,a[j].y);
f=a[j].e;
}
}
if(f) ans++;
}
cout<<ans;
return 0;
}