atcoder ABC 281(A-C)
A
要求你从N开始,一直打印到0。像这样:
N
N-1
......
3
2
1
0
简单
#include<iostream>
using namespace std;
int n;
int main(){
cin>>n;
for(int i=n;i>=0;i--)cout<<i<<endl;
return 0;
}
B
输入一个字符串S,要求S的开头和结尾是大写字母。中间是100000-999999的数字。
设置四个if就可以过了,不用考虑什么最优解啥的。
#include<iostream>
#include<string>
using namespace std;
string in;
int ans[3];
bool t;
int main(){
t=false;
getline(cin,in);
int len=in.size();
if(len!=8){//大小不是8肯定不满足
printf("No");
return 0;
}
if(in[0]<='Z'&&in[0]>='A')ans[0]++;//第一个是不是大写字母
if(in[7]<='Z'&&in[7]>='A')ans[2]++;//最后一个是不是大写字母
if(in[1]>'0'&&in[1]<='9')ans[1]++;//第二个是不是大于1的数字,不是不满足对数字的要求
for(int i=2;i<7;i++){//接下来检查是不是数字,不能不是数字
if(in[i]<='9'&&in[i]>='0')ans[1]++;
}
if(ans[1]==6&&ans[0]&&ans[2]){
printf("Yes");
return 0;
}else{
printf("No");
return 0;
}
}
C
输入一个数组S,数字T。
题意为。有个循环播放的歌单。问T时间后停在了哪首歌上。
如果你一首歌一首歌的去减,会tml。因为我这样tml了一次(哭)
只需要先把T取余ΣSi,然后就一个一个找一下就行了,时间复杂度直接干到O(n)。(\(S_{i}\)是指S数组中的第i个数字)
#include<iostream>
using namespace std;
long long in[100005];
int n,an;
long long ans;
long long mod;
int main(){
scanf("%d %lld",&n,&ans);
for(int i=1;i<=n;i++){
scanf("%lld",&in[i]);
mod+=in[i];
}
ans%=mod;
an=1;
while(ans>0){
ans-=in[an];
if(ans<=0)break;
an++;
an%=n+1;
}
printf("%d %lld",an,in[an]+ans);
return 0;
}
本文来自博客园,作者:{bvwvd},转载请注明原文链接:{https://www.cnblogs.com/bvwvd/}

浙公网安备 33010602011771号