######解いた問題はATcorder上の『細長いお菓子』と言う問題です。下にリンクを貼っておきます。
リンク内容
↓出力に関する制限だけ抜き出しておきます。
『高橋君がこのお菓子から切り出すことの出来る「同じ味のブロックが2 つ以上含まれない、ひと繋がりになった部分」の最大の長さをcm単位で表す1つの整数を1行に出力せよ。出力の末尾に改行をいれること。』
#####これから2つのコードを掲示します。前者はACであり、後者がWAです。二つの違いは入出力をテンプレートで行なっているか否かです。
c++
1//accepted code 2#include <bits/stdc++.h> 3#include <algorithm> 4#include <cmath> 5#include <set> 6#include <cstdio> 7#include <vector> 8#include <iostream> 9#include <utility> 10#include <queue> 11#include <map> 12 13#define fir first 14#define sec second 15#define sz(s) (s).size() 16#define pb push_back 17#define get(n) scanf("%d",&n); 18#define gets(s) string s;cin >> (s); 19#define prfi(n) printf("%d", &n); 20#define prfd(n) printf("%lf", &n); 21#define All(s) (s).begin(), (s).end() 22#define rep(i,j) for(int (i)=0;(i)<(j);(i)++) 23#define For(i,j,k) for(int (i)=(j);(i)<(k);(i)++) 24#define repd(i,j) for(int (i)=(j);(i)>=0;(i)--) 25#define Ford(i,j,k) for(int (i)=(j);i>=(k);i--) 26#define vfor(c,v) for(auto (c): v) 27#define dump(x) std::cout << #x << " = " << (x) << std::endl; 28#define debug(x) cout << #x << " = " << (x) << " (L" << __LINE__ << ")" << " " << __FILE__ << endl; 29 30using ll = long long; 31using pii = std::pair<int,int>; 32using vi = std::vector<int> ; 33using vvi = std::vector<vi> ; 34using vll = std::vector<ll>; 35using vvll = std::vector<vll>; 36using vd = std::vector<double> ; 37using vvd = std::vector<vd> ; 38using qi = std::queue<int> ; 39using vpii = std::vector<std::pair<int, int> >; 40using namespace std; 41 42const int Mod = (1e9) + 7; 43const int max_n = 3 * (1e5) + 1; 44const int max_m = 83 * (1e5) + 1; 45const int INF = 10241024; 46const ll INFL = (1ll << 62) - 1; 47const int dx[] = {-1, 0, 0, 1}; 48const int dy[] = {0, -1, 1, 0}; 49//_____________________________________Templates_________________________________________// 50 51template<class T1, class T2> inline void chmin(T1 &a, T2 b){if(a > b) a = b;} 52template<class T1, class T2> inline void chmax(T1 &a, T2 b){if(a < b) a = b;} 53 54//mainly use for dynamic prog 55template<class T1, class T2> 56void update(T1 &a, T2 b){ 57 a += b; 58 if(a > Mod) a %= Mod; 59} 60 61inline void IN(void){ 62 return; 63} 64 65template <typename First, typename... Rest> 66void IN(First& first, Rest&... rest){ 67 cin >> first; 68 IN(rest...); 69 return; 70} 71 72inline void OUT(void){ 73 cout << "\n"; 74 return; 75} 76 77template <typename First, typename... Rest> 78void OUT(First first, Rest... rest){ 79 cout << first << " "; 80 OUT(rest...); 81 return; 82} 83//_____________________ following sorce code_________________________// 84int n,m,k; 85//vvll dp(400, vll(400)); 86string S; 87vll cost(1 << 16); 88int a,b,c; 89int h,w; 90vi v; 91vll u; 92 93bool check(){ 94} 95 96int main () { 97 cin.tie(0); 98 ios::sync_with_stdio(false); 99 IN(n); 100 v = vi(n); 101 rep(i,n)IN(v[i]); 102 int ans = 0; 103 int idx = 0; 104 map<int, int> mp; 105 rep(i,n){ 106 while(idx < n && mp[v[idx]] == 0){ 107 mp[v[idx]]++; 108 idx++; 109 } 110 111 chmax(ans, idx - i); 112 if(i == idx)idx++; 113 else mp[v[i]]--; 114 } 115 cout << ans << endl; 116 //cout << fixed << setprecision(15) << ans << endl; 117 return 0; 118}
次にWAのコードを掲示します。
#include <bits/stdc++.h> #include <algorithm> #include <cmath> #include <set> #include <cstdio> #include <vector> #include <iostream> #include <utility> #include <queue> #include <map> #define fir first #define sec second #define sz(s) (s).size() #define pb push_back #define get(n) scanf("%d",&n); #define gets(s) string s;cin >> (s); #define prfi(n) printf("%d", &n); #define prfd(n) printf("%lf", &n); #define All(s) (s).begin(), (s).end() #define rep(i,j) for(int (i)=0;(i)<(j);(i)++) #define For(i,j,k) for(int (i)=(j);(i)<(k);(i)++) #define repd(i,j) for(int (i)=(j);(i)>=0;(i)--) #define Ford(i,j,k) for(int (i)=(j);i>=(k);i--) #define vfor(c,v) for(auto (c): v) #define dump(x) std::cout << #x << " = " << (x) << std::endl; #define debug(x) cout << #x << " = " << (x) << " (L" << __LINE__ << ")" << " " << __FILE__ << endl; using ll = long long; using pii = std::pair<int,int>; using vi = std::vector<int> ; using vvi = std::vector<vi> ; using vll = std::vector<ll>; using vvll = std::vector<vll>; using vd = std::vector<double> ; using vvd = std::vector<vd> ; using qi = std::queue<int> ; using vpii = std::vector<std::pair<int, int> >; using namespace std; const int Mod = (1e9) + 7; const int max_n = 3 * (1e5) + 1; const int max_m = 83 * (1e5) + 1; const int INF = 10241024; const ll INFL = (1ll << 62) - 1; const int dx[] = {-1, 0, 0, 1}; const int dy[] = {0, -1, 1, 0}; //_____________________________________Templates_________________________________________// template<class T1, class T2> inline void chmin(T1 &a, T2 b){if(a > b) a = b;} template<class T1, class T2> inline void chmax(T1 &a, T2 b){if(a < b) a = b;} //mainly use for dynamic prog template<class T1, class T2> void update(T1 &a, T2 b){ a += b; if(a > Mod) a %= Mod; } inline void IN(void){ return; } template <typename First, typename... Rest> void IN(First& first, Rest&... rest){ cin >> first; IN(rest...); return; } inline void OUT(void){ cout << "\n"; return; } template <typename First, typename... Rest> void OUT(First first, Rest... rest){ cout << first << " "; OUT(rest...); return; } //_____________________ following sorce code_________________________// int n,m,k; //vvll dp(400, vll(400)); string S; vll cost(1 << 16); int a,b,c; int h,w; vi v; vll u; bool check(){ } int main () { cin.tie(0); ios::sync_with_stdio(false); IN(n); v = vi(n); rep(i,n)IN(v[i]); int ans = 0; int idx = 0; map<int, int> mp; rep(i,n){ while(idx < n && mp[v[idx]] == 0){ mp[v[idx]]++; idx++; } chmax(ans, idx - i); if(i == idx)idx++; else mp[v[i]]--; } OUT(ans); //cout << fixed << setprecision(15) << ans << endl; return 0; }
アルゴリズムに関しては違いは無く、話題とする必要は感じませんので、省略します。
######何故後者のコードがWAになっているか理解出来ません。何卒ご教授下さい。c++14を用いております。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/21 23:41