- 王晨逸 的博客
7.27
- @ 2025-7-27 20:34:55
A. 蜡烛
思路:找到最小的正整数,把k个数当成一个区间,a,b为区间的边界,写出每种情况,分成三个部分写,最后取出最小值
代码实现
#include<bits/stdc++.h>
using namespace std;
long long n,k,x[100001],a=1,b,sum=1e18,c[100001],mid;
bool bo;
int main(){
freopen("candy.in","r",stdin);
freopen("candy.out","w",stdout);
cin>>n>>k;
for(long long i=1;i<=n;i++){
cin>>x[i];
if(x[i]==abs(x[i])&&!bo){
mid=i;
bo=true;
}
x[i]=abs(x[i]);
if(x[i]>0&&x[i]<b){
b=i;
}
if(i>=2){
if(i==mid){
c[i]=x[i]+x[i-1]+c[i-1];
}else{
c[i]=max(x[i],x[i-1])-min(x[i],x[i-1])+c[i-1];
}
}else{
c[i]=x[i];
}
}
if(mid==0){
mid=n+1;
}
if(b<k){
b+=k-b;
}else if(b>k){
b-=b-k;
}
while(b<=n){
if(b<mid){
b=mid-1;
a=mid-k;
sum=min(sum,x[a]);
}else if(b>=mid&&a<mid){
if(x[b]>x[a]){
sum=min(sum,2*x[a]+x[b]);
}else{
sum=min(sum,2*x[b]+x[a]);
}
}else if(a>=mid){
sum=min(sum,x[b]);
}
a++;
b++;
}
cout<<sum;
return 0;
}
B. 白日梦
思路:使用substr判断前几个数是否和四个单词一致,如果不一致,直接输出NO如果循环没有跳出,输出YES
代码实现
#include<bits/stdc++.h>
using namespace std;
string s;
bool v(string s){
long long p=s.size();
while(p>0){
if(p>=5&&s.substr(p-5,5)=="dream") {
p-=5;
}else if(p>=7&&s.substr(p-7,7)=="dreamer"){
p-=7;
}else if(p>=5&&s.substr(p-5,5)=="erase"){
p-=5;
}else if(p>=6&&s.substr(p-6,6)=="eraser"){
p-=6;
}else{
return false;
}
}
return true;
}
long long n;
int main(){
freopen("daydream.in","r",stdin);
freopen("daydream.out","w",stdout);
cin>>s;
if(v(s)){
cout<<"YES";
}else{
cout<<"NO";
}
return 0;
}
C. 重复重复重复...重复重复
思路:数学题,推公式d×(10k−1)/9
代码实现
#include<bits/stdc++.h>
using namespace std;
long long n,m,a,sum;
int main(){
freopen("repeat.in","r",stdin);
freopen("repeat.out","w",stdout);
cin>>n>>m;
for(long long d=1;d<=9;d++){
long long s=0;
for(long long i=1;i<=n;i++){
s=(s*10+d)%m;
if(s==0&&i>=sum){
sum=i;
a=d;
}
}
}
if(sum==0){
cout<<-1;
return 0;
}
for(int i=1;i<=sum;i++){
cout<<a;
}
return 0;
}
D. 灯
思路:枚举上下左右四个方向,当枚举每一个空地的时候,把上下左右四个方向的数字累加起来,减三(因为四个方向都把它本身算进去了),最后输出一个最大值
代码实现
#include<bits/stdc++.h>
using namespace std;
char s[2001][2001];
long long h,w,l[2001][2001],r[2001][2001],u[2001][2001],d[2001][2001],sum;
int main(){
freopen("deng.in","r",stdin);
freopen("deng.out","w",stdout);
cin>>h>>w;
for(long long i=1;i<=h;i++){
for(long long j=1;j<=w;j++){
cin>>s[i][j];
}
}
for(long long i=1;i<=h;i++){
long long c=1;
for(long long j=1;j<=w;j++){
if(s[i][j]=='#'){
c=1;
}else{
l[i][j]=c++;
}
}
}
for(long long i=1;i<=h;i++){
long long c=1;
for(long long j=w;j>=1;j--){
if(s[i][j]=='#'){
c=1;
}else{
r[i][j]=c++;
}
}
}
for(long long j=1;j<=w;j++){
long long c=1;
for(long long i=1;i<=h;i++){
if(s[i][j]=='#'){
c=1;
}else{
u[i][j]=c++;
}
}
}
for(long long j=1;j<=w;j++){
long long c=1;
for(long long i=h;i>=1;i--){
if(s[i][j]=='#'){
c=1;
}else{
d[i][j]=c++;
}
}
}
for(long long i=1;i<=h;i++){
for(long long j=1;j<=w;j++){
if(s[i][j]=='.'){
sum=max(sum,l[i][j]+r[i][j]+u[i][j]+d[i][j]-3);
}
}
}
cout<<sum;
return 0;
}