[Codeforces Round #530 (Div. 2)] A,B,C
阿新 • • 發佈:2019-01-06
[Codeforces Round #530 (Div. 2)] A,B,C
前言:
這是一場十分難受的cf,分數1551 → 1548
,基本上算是變化不大,4min
出的A,有點慢,但是考慮到題意稍微有點坑人,總的來說能夠接受,9min
莽了一發B,然後就開始開C,C的做法不是特別好,在除錯的時候出了一點問題,WA了幾發,45min
出的C,(這個時候就開始被隊友陸陸續續超過了,後期乏力,我恨啊),到最後D都沒有調的出來,賽後學長告訴我這個地方用DFS的寫法可能會更好一點,還是重新去補一下好了。前期題的速度基本上算是可以保證了,下面補題的重心應該在三四兩題了,藍瘦香菇。
A. Snowball
題意
從某個高度開始有一個雪球滾落,會根據高度不斷積攢自己的重量,途中有兩塊石頭,撞到石頭要減去石頭的重量,如果不足,則置零,但是注意,即使質量為零,雪球也不會停止滾動。
做法
按題意暴力模擬就好了
程式碼
#include <cstdio> using namespace std; int main() { int n,h; scanf("%d%d",&n,&h); int u1,u2,d1,d2; scanf("%d%d%d%d",&u1,&d1,&u2,&d2); for(int i=h;i>0;i--) { n+=i; if(i==d1) n = max(0,n-u1); if(i==d2) n = max(0,n-u2); } printf("%d",n); }
B. Squares and Segments
題意
Sofia想做出n個小正方形,問她最少需要用尺規做出幾條邊。
理解下來的意思就是說,我們需要一個使得(x+y)儘可能小的x*y的表格可以放下n個小正方形。
做法
對n開根號,求出一條邊x,另一條對n除x做上取整。
程式碼
#include <cstdio> #include <cmath> using namespace std; int main() { int n; scanf("%d",&n); int ans = sqrt(n); ans += (n+ans-1)/ans; printf("%d",ans); }
C. Postcard
題意
給定一個字串,對於每一個‘ ? ’可以刪去或保留前面的一個字元,對於每一個’ * ',可以刪去或保留或重複多次前一個字元。再給定一個數,問,是否有滿足長度要求和操作要求的串,如果有,輸出,如果沒有,返回-1。
做法
統計?和*的個數,對不同的情況進行分類處理。
程式碼
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
using namespace std;
char a[1000];
int main()
{
scanf("%s",a);
int k;
scanf("%d",&k);
int len = strlen(a);
int cntc = 0;
int cnts = 0;
for(int i=0; i<len; i++)
{
if(a[i]=='?')
cntc++;
if(a[i]=='*')
cnts++;
}
if(k<len-2*cntc-2*cnts)
{
printf("Impossible\n");
return 0;
}
if(cnts==0)
{
int tmp = len - cntc - k;
if(tmp<0)
{
printf("Impossible\n");
return 0;
}
for(int i=0; i<len; i++)
{
if(a[i+1]=='?')
{
if(tmp)
tmp--;
else
printf("%c",a[i]);
i++;
}
else
{
printf("%c",a[i]);
}
}
}
else
{
int tmp = len - cntc -cnts - k;
if(tmp>0)
{
for(int i=0; i<len; i++)
{
if(a[i+1]=='?'||a[i+1]=='*')
{
if(tmp)
tmp--;
else
printf("%c",a[i]);
i++;
}
else
{
printf("%c",a[i]);
}
}
}
else
{
for(int i=0; i<len; i++)
{
if(a[i+1]=='?')
{
printf("%c",a[i]);
i++;
}
else if(a[i+1]=='*')
{
while(tmp<0)
{
printf("%c",a[i]);
tmp++;
}
printf("%c",a[i]);
i++;
}
else
{
printf("%c",a[i]);
}
}
}
}
}