1. 程式人生 > 其它 >atcoder ABC 281(A-C)

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){
		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]++;
	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)。(Si是指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;
}