Red学编程
注意判断 ac个数 等于零的情况不要re
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
int main()
{
int n;
while(~scanf("%d",&n))
{
int sum=0,cnt=0;
for(int i=1;i<=n;i++)
{
int x;char op[4];
scanf("%d %s",&x,op);
if(op[0]=='A') sum+=x,cnt++;
}
if(cnt==0) puts("0 0");
else printf("%d %d\n",sum,sum/cnt);
}
}
##Red的长跑
只能在早上跑和晚上跑的,直接就减掉
统计以及早上和晚上都能跑的可不可以平均分摊到剩下要跑的天数
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
int main()
{
int n,a,b,cnt=0;
scanf("%d %d %d",&n,&a,&b);
for(int i=1;i<=n;i++)
{
int f[3];
scanf("%d %d",&f[1],&f[2]);
if(f[1]==1&&f[2]==0) a=max(a-1,0);
if(f[1]==0&&f[2]==1) b=max(b-1,0);
if(f[1]==1&&f[2]==1) cnt++;
}
if(a+b<=cnt) puts("Yes");
else puts("No");
}
Red去购物
贪心 剩下的钱直接先取最大的纸币
dp 背包模型
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
int main()
{
int a,b,c,d,e,f,x;
while(~scanf("%d %d %d %d %d %d %d",&a,&b,&c,&d,&e,&f,&x))
{
int sum=a+b*5+c*10+d*20+e*50+f*100;
if(sum<x) puts("oh no!");
else
{
int v[6]={
1,5,10,20,50,100};
sum-=x;
int ans=0;
for(int i=5;i>=0;i--)
{
ans+=sum/v[i];
sum-=(sum/v[i])*v[i];
}
printf("%d\n",ans);
}
}
}
Red的挖洞
bfs 直接将所有洞放入队列里,将地图上的每个点更新成与他最近的洞的编号,由于入队时满足小的编号在前面,所以题目要求 **(如果有多个出口的“曼哈顿距离”相同,选择出口编号最小的)**就可以满足
最后暴力更新x,y即可
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
struct node{
int x,y;
};
queue<node>q;
int dx[4]={
1,0,-1,0};
int dy[4]={
0,-1,0,1};
int mp[1005][1005];
bool check(int x,int y)
{
if(x<0||x>1000) return 0;
if(y<0||y>1000) return 0;
if(mp[x][y]) return 0;
return 1;
}
void bfs()
{
while(q.size())
{
int x=q.front().x,y=q.front().y;q.pop();
for(int i=0;i<4;i++)
{
int tx=x+dx[i],ty=y+dy[i];
if(check(tx,ty))
{
mp[tx][ty]=mp[x][y];
q.push({
tx,ty});
}
}
}
}
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
int x,y;
scanf("%d %d",&x