内容简介:题目大意: 有一个高h重w的雪球从山上滚下来,每下降一米,重量+=高度,中间会碰到两个石头,碰到后雪球减去石头的重量,问到达高度为 0 是重量为多少小于0则看做0模拟题……
A
题目大意: 有一个高h重w的雪球从山上滚下来,每下降一米,重量+=高度,中间会碰到两个石头,碰到后雪球减去石头的重量,问到达高度为 0 是重量为多少
小于0则看做0
模拟题……
#include <cstdio> int w,h; int u1,u2,d1,d2; int main(){ scanf("%d%d%d%d%d%d",&w,&h,&u1,&d1,&u2,&d2); while(h){ w+=h; if(h==d1) w-=u1; if(h==d2) w-=u2; if(w<0) w=0; h--; } printf("%d",w); }
B
现在需要画$n$个正方形,问最少需要几个单位线段可以保证画出来的$n$个正方形的每条边都可以通过已有线段平行得到
贪心就对了
#include <cstdio> #include <cmath> int n,tmp,ans; int main(){ scanf("%d",&n); tmp=std::sqrt(n); if(n%tmp==0){ printf("%d",tmp+(n/tmp)); return 0; } else { ans=tmp+(n/tmp); printf("%d",ans+1); } }
C
给你一个字符串,如果一个字母后跟的是 *
表示这个字母可以被删除,保留或重复多次,如果跟的是 ?
表示这个字母可以被删除或者保留,如果都不是,则表明其必须留在原位置
贪心题目,比较原字符串长度与要求的长度,然后分段讨论
#include <cstdio> #include <cstring> int k,len,zlen,sfcnt,tmp; bool sf,cd; char s[1000]; int main(){ scanf("%s",s+1); scanf("%d",&k); len=strlen(s+1); for(int i=1;i<=len;i++){ if(s[i]>='a'&&s[i]<='z') zlen++; if(s[i]=='?') sfcnt++; if(s[i]=='*') {cd=true;sfcnt++;} } if(zlen>k){ if(sfcnt<zlen-k){ printf("Impossible"); return 0; } for(int i=1;i<=len;i++){ if(s[i]=='*'||s[i]=='?') continue; if(s[i+1]=='?'||s[i+1]=='*'){ if(zlen>k) {zlen--;sfcnt--;} else printf("%c",s[i]); } else printf("%c",s[i]); } } else if(zlen==k){ for(int i=1;i<=len;i++){ if(s[i]=='*'||s[i]=='?') continue; else printf("%c",s[i]); } } else if(zlen<k){ if(!cd){ printf("Impossible"); return 0; } for(int i=1;i<=len;i++){ if(s[i]=='*'||s[i]=='?') continue; else if(s[i+1]=='*'){ printf("%c",s[i]); while(1){ if(zlen>=k) break; printf("%c",s[i]); zlen++; } } else printf("%c",s[i]); } } }
D
现在已知树的形态与奇数深度点到根的长度(最短路径所经过的边的边权和)
因为交叉未知……所以直接贪心!!!
#include <cstdio> #include <cstdlib> inline int Min(int a,int b){return a<b?a:b;} const int N=1e5+2e4; const int INF=2147483640; int n,v; long long sum=0; int s[N],a[N],son[N]; // edge start struct edge{ int to,next; }e[N<<1]; int ehead[N],ecnt; inline void add_edge(int now,int to){ ecnt++; e[ecnt].to=to; e[ecnt].next=ehead[now]; ehead[now]=ecnt; } // edge end void dfs(int now,int val){ if(s[now]<=-1){ int tmp=INF; for(int i=ehead[now];i;i=e[i].next){ tmp=Min(s[e[i].to],tmp); } if(tmp==INF) return ; tmp-=val;a[now]=tmp; for(int i=ehead[now];i;i=e[i].next){ s[e[i].to]-=val+a[now]; } for(int i=ehead[now];i;i=e[i].next){ dfs(e[i].to,val+a[now]); } return ; } a[now]=s[now]; for(int i=ehead[now];i;i=e[i].next){ dfs(e[i].to,val+a[now]); } } int main(){ scanf("%d",&n); for(int i=2;i<=n;i++){ scanf("%d",&v); add_edge(v,i); } for(int i=1;i<=n;i++){ scanf("%d",&s[i]); if(s[i]!=-1&&s[i]<s[1]){ printf("-1"); return 0; } } dfs(1,0); sum=0; for(int i=1;i<=n;i++){ if(a[i]<0){ printf("-1"); return 0; } sum+=a[i]; } printf("%lld",sum); }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Leetcode 第133场周赛解题报告
- Leetcode 第135场周赛解题报告
- Leetcode 第136场周赛解题报告
- Codeforces Round #538 (Div. 2) 解题报告
- The Cryptopals Crypto Challenges 解题报告(1)
- The Cryptopals Crypto Challenges 解题报告(2)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Programming Amazon Web Services
James Murty / O'Reilly Media / 2008-3-25 / USD 49.99
Building on the success of its storefront and fulfillment services, Amazon now allows businesses to "rent" computing power, data storage and bandwidth on its vast network platform. This book demonstra......一起来看看 《Programming Amazon Web Services》 这本书的介绍吧!