感觉区分度不明显,D题之后感觉都有arc的难度了。
A - TLD
输出字符串最后一个.之后的内容,比如www.baidu.com,输出com
扫一遍输出
#include
//#define int long long
#define per(i,j,k) for(int (i)=(j);(i)<=(k);++(i))
#define rep(i,j,k) for(int (i)=(j);(i)>=(k);--(i))
#define fr first
#define se second
#define endl '\n'
using namespace std;
string s,ans;
void solve(){
cin>>s;
per(i,0,s.length()-1){
ans=ans+s[i];
if(s[i]=='.')ans="";
}
cout<
B - Langton's Takahashi
解释起来比较麻烦,总之就是模拟题,题目怎么说我们怎么做就可以了,具体看代码。
#include
//#define int long long
#define per(i,j,k) for(int (i)=(j);(i)<=(k);++(i))
#define rep(i,j,k) for(int (i)=(j);(i)>=(k);--(i))
#define fr first
#define se second
#define endl '\n'
using namespace std;
int h,w,n;
int dir=1;//1up,2right,3down,4left
pairnow;
bool a[105][105];
void move(){
if(dir==1){
now.fr--;
if(now.fr==0)now.fr=h;
}else if(dir==2){
now.se++;
if(now.se==w+1)now.se=1;
}else if(dir==3){
now.fr++;
if(now.fr==h+1)now.fr=1;
}else if(dir==4){
now.se--;
if(now.se==0)now.se=w;
}
}
void solve(){
cin>>h>>w>>n;
now.fr=1,now.se=1;
while(n--){
if(a[now.fr][now.se]==0){
a[now.fr][now.se]=true;
dir++;
if(dir==5)dir=1;
move();
}else{
a[now.fr][now.se]=false;
dir--;
if(dir==0)dir=4;
move();
}
}
per(i,1,h){
per(j,1,w){
if(a[i][j]==false){
cout<<".";
}else cout<<"#";
}cout<
C - Perfect Bus
有一辆车,给你N个上下车的情况,问最后车上最少有多少人,车上人数一定是大于等于0的。
只要每次上下车的时候车上的人数一定是大于等于0就行了。如果某次车上人数小于0,找出最小的那个,加到最后的时间点上。
#include
#define int long long
#define per(i,j,k) for(int (i)=(j);(i)<=(k);++(i))
#define rep(i,j,k) for(int (i)=(j);(i)>=(k);--(i))
#define fr first
#define se second
#define endl '\n'
using namespace std;
const int N=2e5+5;
int a[N],n,minn=LONG_LONG_MAX,tmp;
void solve(){
cin>>n;
per(i,1,n)cin>>a[i];
tmp=a[1];
per(i,2,n){
minn=min(minn,tmp);
tmp+=a[i];
}
minn=min(minn,tmp);
if(minn<0)tmp-=minn;
cout<