C++/대회기록, CP기록
AtCoder Beginner Contest 291 후기 (ABC 291 3솔)
fepick포트폴리오
2023. 2. 26. 22:57
이번 ABC는 친절하게도 에디토리얼이 있으니 개인적인 생각만 간단하게 남기겠다
왜 맨날 D번에서 막힐까?
A - camel Case
문자열을 입력받고,
문자열의 처음부터 끝까지 순서대로 탐색하면서 대문자가 나오는 순간 인덱스 + 1 을 출력하면 된다
개쉽네~ 생각하면서 풀다가 아스키코드를 헷갈려서 오답을 2번 제출했다
아스키코드표에서 A가 a 보다 먼저 온다
그러니까 영어 대문자를 찾으려면 'Z' 이하의 char 을 찾아야 함
B - Trimmed Mean
문제 제대로 안읽어서 2번 오답을 제출했다
설명이 필요한가??
5*N번 입력을 받은 다음 그것들을 sort 함수로 정렬한 다음
N번부터 ~ <4N번까지의 sum을 구한 뒤 3N으로 나눈 값을 출력하면 된다
fixed와 setprecision을 사용해서 원하는 소수점 자리까지 출력한다
C - LRUD Instructions 2
얘는 실수 안함
0,0에서 출발해서, 어떤 x,y좌표를 2번 이상 방문한 경우, Yes를 출력하면 된다.
한 번 방문한 x,y좌표를 기억하기 위해 set을 사용했다
D - Flip Cards
경우의 수를 따지는 문제인데 왜 못 품??
내가 확률과통계를 싫어해서 그런가?
실패한 코드
// WA code WA code WA code WA code WA code WA code WA code WA code
#include <bits/stdc++.h>
#define fastio cin.tie(0)->sync_with_stdio(0)
#define ll long long
const int divnum = 998244353;
ll divconquer_mul(ll a,ll b){
if(b==0)return 1;
ll ans = 1;
while (b)
{
if(b%2==1){
ans*=a;
ans%=divnum;
b--;
}
b=b>>1;
a*=a;
a%=divnum;
}
return ans%divnum;
}
using namespace std;
int main(){
fastio;
int N;cin>>N;
int a,b;cin>>a>>b;
ll ans = 2;
for (int i = 1; i < N; i++)
{
int x,y;cin>>x>>y;
if(a==b&&x==y&&a==x){//불가능
cout<<0;return 0;
}
else if(a!=b&&a!=x&&a!=y&&b!=x&&b!=y&&x!=y){//모두다름
ans*=2;
ans%=divnum;
}
else if(a==x&&b==y||a==y&&b==x){
;
}
else if(a==x||a==y||b==x||b==y){
ans+=(ans/2);
ans%=divnum;
}
a=x;b=y;
}
cout<<ans%divnum;
return 0;
}
// WA code WA code WA code WA code WA code WA code WA code WA code
일일히 다양한 case를 if else if 로 따지려고 해서 못 푼 것 같다
분명 더 좋은 방법이 있을 것
분할정복을 이용한 거듭제곱 코드는 만들어놓고 쓰지도 않았다
복습을 열심히 하고 다음주엔 꼭 4~5솔을 노려보겠다