今天打了打ABC,结果觉得这应该是一个我做过的最简单的了(题数做的最多的一次)。话不多说,一起来看看吧!
A - First Grid
题目大意给你2*2的#.组成的图,问你所有的#是否联通
思路:
每个点都判断一遍,一个点可行就输出
CODE:
#includeusing namespace std; char a[3][3]; int main() { for(int i=1;i<=2;i++) for(int j=1;j<=2;j++) cin>>a[i][j]; if(a[1][1]=='#'&&a[1][2]=='#'||a[1][1]=='#'&&a[2][1]=='#'||a[1][2]=='#'&&a[2][2]=='#'||a[2][1]=='#'&&a[2][2]=='#') cout<<"Yes"< B - Hard Calculation
题目大意两个数相加,如果发生了进位输出Hard,否则输出Easy。
思路:两个数的每一位都加一遍,有一个超过10的就输出Hard.
CODE:
#includeusing namespace std; string str1,str2; int main() { cin>>str1>>str2; for(int i=str1.size(),j=str2.size();i>=0,j>=0;i--,j--) if(int(int(char(str1[i])-'0')+int(char(str2[j])-'0'))>=10) { cout<<"Hard"< C - Cheese
题目大意给你若干材料,有两个属性ai和bi,ai是每克材料的美味度,bi是有多少克这个材料。问你最多选w克材料的情况下,可以选出最多多少美味度。
思路:用结构体来做,把美味度从高到低排序就行了
CODE:
#includeusing namespace std; long long n,w,ans; struct ab { long long mw,zl; } a[300010]; bool cmp(ab a,ab b) { return a.mw>b.mw; } int main() { scanf("%lld %lld",&n,&w); for(long long i=1; i<=n; i++) scanf("%lld %lld",&a[i].mw,&a[i].zl); sort(a+1,a+n+1,cmp); for(long long i=1;i<=n;i++) { if(w>=a[i].zl) ans+=a[i].zl*a[i].mw,w-=a[i].zl; else { ans+=w*a[i].mw; break; } } printf("%lldn",ans); return 0; } D - Longest X
题目大意给你一个‘.’和‘X’组成的字符串,你最多可以将k个位置的.换成X,问你,进行 *** 作之后,连续的X最长是多少?
- 1≤∣S∣≤2×10^5
- Each character of S is X or .
- 0≤K≦2×10^5
- K is an integer.
思路:可以先确定在[l......r]中有多少个‘.’,后面再按情况来就行了
CODE:
#includeusing namespace std; string str; int k,len,ans,r; int f[200010]; int main() { cin>>str>>k; len=str.size(); for(int i=1; i<=len; i++) if(str[i-1]=='.') f[i]=f[i-1]+1; else f[i]=f[i-1]; for(int l=0; l 欢迎分享,转载请注明来源:内存溢出
评论列表(0条)