atcoder ABC 281(A-C)
阿新 • • 發佈:2022-12-12
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; }