제출 #581577

#제출 시각아이디문제언어결과실행 시간메모리
581577HeyYouNotYouYouMiners (IOI07_miners)C++17
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h> #define int long long #define endl '\n' using namespace std; const int N = 100001,INF=1e12; int n; string s; int dp[N][41][41]; map<string,int>st; map<int,string>ori; void states(){ char you[3]={'M','F','B'}; int cnt=1; ori[cnt]="M"; st["M"]=cnt++; ori[cnt]="B"; st["B"]=cnt++; ori[cnt]="F"; st["F"]=cnt++; ori[cnt]="MM"; st["MM"]=cnt++; ori[cnt]="MB"; st["MB"]=cnt++; ori[cnt]="MF"; st["MF"]=cnt++; ori[cnt]="FB"; st["FB"]=cnt++; ori[cnt]="FM"; st["FM"]=cnt++; ori[cnt]="FF"; st["FF"]=cnt++; ori[cnt]="BF"; st["BF"]=cnt++; ori[cnt]="BB"; st["BB"]=cnt++; ori[cnt]="BM"; st["BM"]=cnt++; for(int i = 0 ; i < 3 ; i ++) for(int j = 0 ; j < 3 ; j ++) for(int k = 0 ; k < 3 ; k ++) { string y=""; y+=you[i]; y+=you[j]; y+=you[k]; st[y]=cnt,ori[cnt]=y,cnt++; } //for(auto it=st.begin();it!=st.end();it++) cout<<it->first<<" "<<it->second<<endl; } int solve(int i,int state1,int state2) { //cout<<i<<" "<<state1<<" "<<state2<<endl; if(i==n) return 0; int ans=0; if(dp[i][state1][state2]!=-1) return dp[i][state1][state2]; char x = s[i]; if(ori[state1].size()<3){ string curstate = ori[state1]; curstate+=s[i]; set<char>diff; for(int i = 0 ; i < curstate.size() ; i++) diff.insert(curstate[i]); ans=solve(i+1,st[curstate],state2)+diff.size(); } else if(ori[state1].size()==3) { string curstate=""; curstate+=ori[state1][1] , curstate+=ori[state1][2]; curstate+=s[i]; set<char>diff; for(int i = 0 ; i < curstate.size() ; i++) diff.insert(curstate[i]); ans=solve(i+1,st[curstate],state2)+diff.size(); } if(ori[state2].size()<3){ string curstate=ori[state2]; curstate+=s[i]; set<char>diff; for(int i = 0 ; i < curstate.size() ; i++) diff.insert(curstate[i]); ans=max(ans,solve(i+1,state1,st[curstate])+diff.size()); } else if(ori[state2].size()==3) { string curstate=""; curstate+=ori[state2][1] , curstate+=ori[state2][2]; curstate+=s[i]; set<char>diff; for(int i = 0 ; i < curstate.size() ; i++) diff.insert(curstate[i]); ans=max(ans,solve(i+1,state1,st[curstate])+diff.size()); } return dp[i][state1][state2]=ans; } int32_t main() { //freopen("abc.in", "r", stdin); cin >> n ; cin>>s; memset(dp,-1,sizeof dp); states(); cout<<solve(0,0,0); }

컴파일 시 표준 에러 (stderr) 메시지

miners.cpp: In function 'long long int solve(long long int, long long int, long long int)':
miners.cpp:72:25: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   72 |       for(int i = 0 ; i < curstate.size() ; i++) diff.insert(curstate[i]);
      |                       ~~^~~~~~~~~~~~~~~~~
miners.cpp:80:25: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   80 |       for(int i = 0 ; i < curstate.size() ; i++) diff.insert(curstate[i]);
      |                       ~~^~~~~~~~~~~~~~~~~
miners.cpp:88:25: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   88 |       for(int i = 0 ; i < curstate.size() ; i++) diff.insert(curstate[i]);
      |                       ~~^~~~~~~~~~~~~~~~~
miners.cpp:89:61: error: no matching function for call to 'max(long long int&, long long unsigned int)'
   89 |       ans=max(ans,solve(i+1,state1,st[curstate])+diff.size());
      |                                                             ^
In file included from /usr/include/c++/10/bits/specfun.h:45,
                 from /usr/include/c++/10/cmath:1927,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:41,
                 from miners.cpp:1:
/usr/include/c++/10/bits/stl_algobase.h:254:5: note: candidate: 'template<class _Tp> constexpr const _Tp& std::max(const _Tp&, const _Tp&)'
  254 |     max(const _Tp& __a, const _Tp& __b)
      |     ^~~
/usr/include/c++/10/bits/stl_algobase.h:254:5: note:   template argument deduction/substitution failed:
miners.cpp:89:61: note:   deduced conflicting types for parameter 'const _Tp' ('long long int' and 'long long unsigned int')
   89 |       ans=max(ans,solve(i+1,state1,st[curstate])+diff.size());
      |                                                             ^
In file included from /usr/include/c++/10/bits/specfun.h:45,
                 from /usr/include/c++/10/cmath:1927,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:41,
                 from miners.cpp:1:
/usr/include/c++/10/bits/stl_algobase.h:300:5: note: candidate: 'template<class _Tp, class _Compare> constexpr const _Tp& std::max(const _Tp&, const _Tp&, _Compare)'
  300 |     max(const _Tp& __a, const _Tp& __b, _Compare __comp)
      |     ^~~
/usr/include/c++/10/bits/stl_algobase.h:300:5: note:   template argument deduction/substitution failed:
miners.cpp:89:61: note:   deduced conflicting types for parameter 'const _Tp' ('long long int' and 'long long unsigned int')
   89 |       ans=max(ans,solve(i+1,state1,st[curstate])+diff.size());
      |                                                             ^
In file included from /usr/include/c++/10/algorithm:62,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:65,
                 from miners.cpp:1:
/usr/include/c++/10/bits/stl_algo.h:3480:5: note: candidate: 'template<class _Tp> constexpr _Tp std::max(std::initializer_list<_Tp>)'
 3480 |     max(initializer_list<_Tp> __l)
      |     ^~~
/usr/include/c++/10/bits/stl_algo.h:3480:5: note:   template argument deduction/substitution failed:
miners.cpp:89:61: note:   mismatched types 'std::initializer_list<_Tp>' and 'long long int'
   89 |       ans=max(ans,solve(i+1,state1,st[curstate])+diff.size());
      |                                                             ^
In file included from /usr/include/c++/10/algorithm:62,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:65,
                 from miners.cpp:1:
/usr/include/c++/10/bits/stl_algo.h:3486:5: note: candidate: 'template<class _Tp, class _Compare> constexpr _Tp std::max(std::initializer_list<_Tp>, _Compare)'
 3486 |     max(initializer_list<_Tp> __l, _Compare __comp)
      |     ^~~
/usr/include/c++/10/bits/stl_algo.h:3486:5: note:   template argument deduction/substitution failed:
miners.cpp:89:61: note:   mismatched types 'std::initializer_list<_Tp>' and 'long long int'
   89 |       ans=max(ans,solve(i+1,state1,st[curstate])+diff.size());
      |                                                             ^
miners.cpp:96:25: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   96 |       for(int i = 0 ; i < curstate.size() ; i++) diff.insert(curstate[i]);
      |                       ~~^~~~~~~~~~~~~~~~~
miners.cpp:97:61: error: no matching function for call to 'max(long long int&, long long unsigned int)'
   97 |       ans=max(ans,solve(i+1,state1,st[curstate])+diff.size());
      |                                                             ^
In file included from /usr/include/c++/10/bits/specfun.h:45,
                 from /usr/include/c++/10/cmath:1927,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:41,
                 from miners.cpp:1:
/usr/include/c++/10/bits/stl_algobase.h:254:5: note: candidate: 'template<class _Tp> constexpr const _Tp& std::max(const _Tp&, const _Tp&)'
  254 |     max(const _Tp& __a, const _Tp& __b)
      |     ^~~
/usr/include/c++/10/bits/stl_algobase.h:254:5: note:   template argument deduction/substitution failed:
miners.cpp:97:61: note:   deduced conflicting types for parameter 'const _Tp' ('long long int' and 'long long unsigned int')
   97 |       ans=max(ans,solve(i+1,state1,st[curstate])+diff.size());
      |                                                             ^
In file included from /usr/include/c++/10/bits/specfun.h:45,
                 from /usr/include/c++/10/cmath:1927,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:41,
                 from miners.cpp:1:
/usr/include/c++/10/bits/stl_algobase.h:300:5: note: candidate: 'template<class _Tp, class _Compare> constexpr const _Tp& std::max(const _Tp&, const _Tp&, _Compare)'
  300 |     max(const _Tp& __a, const _Tp& __b, _Compare __comp)
      |     ^~~
/usr/include/c++/10/bits/stl_algobase.h:300:5: note:   template argument deduction/substitution failed:
miners.cpp:97:61: note:   deduced conflicting types for parameter 'const _Tp' ('long long int' and 'long long unsigned int')
   97 |       ans=max(ans,solve(i+1,state1,st[curstate])+diff.size());
      |                                                             ^
In file included from /usr/include/c++/10/algorithm:62,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:65,
                 from miners.cpp:1:
/usr/include/c++/10/bits/stl_algo.h:3480:5: note: candidate: 'template<class _Tp> constexpr _Tp std::max(std::initializer_list<_Tp>)'
 3480 |     max(initializer_list<_Tp> __l)
      |     ^~~
/usr/include/c++/10/bits/stl_algo.h:3480:5: note:   template argument deduction/substitution failed:
miners.cpp:97:61: note:   mismatched types 'std::initializer_list<_Tp>' and 'long long int'
   97 |       ans=max(ans,solve(i+1,state1,st[curstate])+diff.size());
      |                                                             ^
In file included from /usr/include/c++/10/algorithm:62,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:65,
                 from miners.cpp:1:
/usr/include/c++/10/bits/stl_algo.h:3486:5: note: candidate: 'template<class _Tp, class _Compare> constexpr _Tp std::max(std::initializer_list<_Tp>, _Compare)'
 3486 |     max(initializer_list<_Tp> __l, _Compare __comp)
      |     ^~~
/usr/include/c++/10/bits/stl_algo.h:3486:5: note:   template argument deduction/substitution failed:
miners.cpp:97:61: note:   mismatched types 'std::initializer_list<_Tp>' and 'long long int'
   97 |       ans=max(ans,solve(i+1,state1,st[curstate])+diff.size());
      |                                                             ^
miners.cpp:66:8: warning: unused variable 'x' [-Wunused-variable]
   66 |   char x = s[i];
      |        ^