結果
問題 | No.587 七対子 |
ユーザー |
![]() |
提出日時 | 2017-11-03 22:41:41 |
言語 | C++11 (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 5,004 bytes |
コンパイル時間 | 861 ms |
コンパイル使用メモリ | 91,360 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-07-19 19:43:03 |
合計ジャッジ時間 | 1,779 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 35 |
ソースコード
#include <fstream>#include <iostream>#include <algorithm>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <string>#include <sstream>#include <map>#include <set>#include <vector>#include <stack>#include <cmath>#include <queue>#include <random>using namespace std;#define INT_MAX_VALUE 2147483647#define LONG_LONG_MAX_VALUE 9223372036854775807template <class T>T mymax(T a,T b){if(a>=b){return a;}return b;}//template <class T>//T mymin(T a,T b){// if(a<=b){// return a;// }// return b;//}////long long gcd(long long a, long long b){// if(a<b){// swap(a,b);// }// while(b){// long long r = a%b;// a=b;// b=r;// }// return a;//}////long long lcm(long long a, long long b){// return (a*b)/gcd(a,b);//}////long long isPrim(long long a){// if(a==1){// return a;// }// for(int i=2;i*i<=a;i++){// if(a%i==0){// return i;// }// }// return a;//}////long long mod_pow(long long x, long long n, long long mod){// //xのn乗を計算するのにn乗を2進表記にして計算// //x^22 = x^16 + x^4 + x^2// long long ret=1;// while(n>0){// if(n&1){// ret=(ret*x)%mod;//答えに付加// }// x=(x*x)%mod;//2乗// n >>=1;// }// return ret;//}////struct XX{long long x;long long y;long long ix;long long iy;};class xxGreater {public:bool operator()(const XX& riLeft, const XX& riRight) const {//第2条件if((riLeft.x) == (riRight.x)){return riLeft.y < riRight.y;//<:昇順(小さいものから順番)、>:降順(大きいものから順番)//プライオリティキューの場合は > で、top()すると値の小さいものがとれる}//第1条件return (riLeft.x) > (riRight.x);}};////union-find//int ppar[1000];//int rrank[1000];////void init(int n){// for(int i=0;i<n;i++){// ppar[i]=i;// rrank[i]=0;// }//}////int find(int x){// if(ppar[x]==x){// return x;// }else{// return ppar[x]=find(ppar[x]);// }//}////void unite(int x,int y){// x=find(x);// y=find(y);// if(x==y){// return;// }// if(rrank[x]<rrank[y]){// ppar[x]=y;// }else{// ppar[y]=x;// if(rrank[x]==rrank[y]){// rrank[x]++;// }// }//}//bool same(int x,int y){// return find(x)==find(y);//}//////kruskal//struct edge{// int u;// int v;// int cost;//};////bool comp(edge& e1,edge& e2){// return e1.cost < e2.cost;//}////edge es[1000];////long long kruskal(int V,int E){//V:頂点数,E:辺数// sort(es,es+E,comp);// init(V);// long long res = 0;// for(int i=0;i<E;i++){// edge e = es[i];// if(!same(e.u,e.v)){// unite(e.u,e.v);// res+=e.cost;// }// }// return res;//}//map<long long,long long> prime_f(long long n){// map<long long,long long>res;// for(int i=2;i*i<=n;i++){// while(n%i==0){// ++res[i];// n/=i;// }// }// if(n!=1)res[n]=1;// return res;//}#define SEN 2000int n;int dat[2*1000000];void init(int n_){n=1;while(n<n_)n*=2;for(int i=0;i<2*n-1;i++)dat[i]=INT_MAX_VALUE;}void update(int k,int a){k+=n-1;dat[k]=a;while(k>0){k=(k-1)/2;dat[k]=min(dat[k*2+1],dat[k*2+2]);}}int query(int a,int b,int k,int l,int r){if(r<=a || b<=l)return INT_MAX_VALUE;if(a<=l && r<=b)return dat[k];else{int vl=query(a,b,k*2+1,l,(l+r)/2);int vr=query(a,b,k*2+2,(l+r)/2,r);return min(vl,vr);}}int main(int argc, const char * argv[]){//std::ios::sync_with_stdio(false);//scanf("%s",S);//scanf("%d",&N);//sscanf(tmp.c_str(),"%dd%d%d",&time[i], &dice[i], &z[i]);//getline(cin, target);//cin >> x >> y;//テスト用//ifstream ifs( "1_06.txt" );//ifs >> a;//ここから//入力高速化ios::sync_with_stdio(false);cin.tie(0);string S;cin >> S;int alpha[26];for(int i=0;i<26;i++){alpha[i]=0;}for(int i=0;i<S.size();i++){alpha[*S.substr(i,1).c_str()-'a']++;}string ans="";for(int i=0;i<26;i++){if(alpha[i]==1 && ans==""){ans='a'+i;}else if(alpha[i]==1 && ans!=""){cout << "Impossible" << endl;return 0;}if(alpha[i]>2){cout << "Impossible" << endl;return 0;}}cout << ans << endl;//ここまで//cout << "ans" << endl;改行含む//printf("%.0f\n",ans);//小数点以下表示なし//printf("%.7f\n",p);//printf("%f\n",pow(2,ans.size()));return 0;}