#include <iostream>
#include <string>
#include <sstream>
#include <list>
#include <vector>
#include <stack>
#include <cstdlib>
#include <iomanip>
#include <cstring>
//using namespace std;
using std::cout;
using std::cin;
using std::endl;
using std::flush;
using std::string;
using std::list;
using std::istringstream;
using std::stringstream;
using std::vector;
using std::stack;
using std::abs;
using std::ios;
using std::setprecision;
//字符串逆序问题 accept
/*void reverseWords(string &s) {
istringstream istr(s);
string word;
list<string> str_list;
s.clear();
while(istr>>word) {
str_list.push_front(word);
}
list<string>::const_iterator iter = str_list.begin();
while( iter!= str_list.end() ){
s += (*iter);
s += " ";
}
}
int main()
{
string s(" the sky is blue ");
istringstream istr(s);
s.clear();
string word;
vector<string> str_vec;
while(istr>>word) {
str_vec.push_back(word);
}
while( 1 ){
s += str_vec.back();
str_vec.pop_back();
if( str_vec.empty() ) break;
s += " ";
}
cout<<s<<endl;
return 0;
}
*/
//逆波兰式问题,accept
/*
int str_to_int(const string &s){
stringstream ss;
ss<<s;
int number = 0;
ss>>number;
return number;
}
int cal(int x1,int x2,char oper){
int result = 0;
switch(oper){
case '+' :
result = x2 + x1;
break;
case '-' :
result = x2 - x1;
break;
case '*':
result = x2 * x1;
break;
case '/' :
result = x2 / x1;
break;
default :
break;
}
return result;
}
int evl(const vector<string> &vec){
stack<int> sta;
int oper1 = 0,oper2 = 0;
vector<string>::const_iterator iter = vec.begin();
while( iter != vec.end() ){
string str_temp = *iter;
if( str_temp == "+" || str_temp == "-" || str_temp == "*" || str_temp == "/" ){
char p = *str_temp.c_str();
oper1 = sta.top();
sta.pop();
oper2 = sta.top();
sta.pop();
int result = cal(oper1,oper2,p);
sta.push(result);
}else{
int foperator = str_to_int(str_temp);
sta.push(foperator);
}
++iter;
}
return sta.top();
}
int main(){
vector<string> vec;
vec.push_back("4");
vec.push_back("13");
vec.push_back("5");
vec.push_back("/");
vec.push_back("+");
cout<<evl(vec)<<endl;
}
*/
/*
int main(){
string s("+");
//const char p = s.c_str();
if(*s.c_str() == '+') cout<<"ok"<<endl;
return 0;
}
*/
//计算A+B accept
/*
int main(){
int a,b;
vector<int> vec;
while(cin>>a>>b){
vec.push_back(a+b);
}
vector<int>::const_iterator iter = vec.begin();
while( iter != vec.end() ){
cout<< *iter <<endl;
++iter;
}
return 0;
}
*/
//从矩阵中寻找值,fail
/*
bool mid_find(int aim_number,const vector<int> *vec ){
vector<int>::size_type upper,lower,pos;
upper = vec->size() - 1;
lower = 0;
vector<int>::size_type temp;
while( upper - lower != 1){
temp = (upper+lower)/2;
if( vec->at(temp) == aim_number ) return true;
else if( vec->at(temp) < aim_number ) lower = temp;
else upper = temp;
}
return false;
}
int main(){
int rows;
int colums;
int aim_number;
vector<string> str_vec;
vector<int>::size_type number_of_data;
vector<int> vec_data;
while(cin>>rows>>colums){
number_of_data = rows*colums;
vector<int> *vec_data = new vector<int>;
cin>>aim_number;
int data;
for(vector<int>::size_type i = 0; i < number_of_data; ++i){
cin>>data;
vec_data->push_back(data);
}
vector<int>::size_type upper( number_of_data - 1 ),lower(0),temp;
while( upper - lower != 1){
temp = (upper+lower)/2;
if( vec_data->at(temp) == aim_number ) {
str_vec.push_back("Yes");
break;
}
else if( vec_data->at(temp) < aim_number ) lower = temp;
else upper = temp;
}
if( upper - lower == 1) str_vec.push_back("No");
delete vec_data;
}
vector<string>::const_iterator iter = str_vec.begin();
while( iter!= str_vec.end() ){
cout<<*iter<<endl;
++iter;
}
return 0;
}
*/
//空格替换,accept
/*
int main(){
string str;
getline(cin,str);
vector<char> str_vec;
string::iterator iter = str.begin();
while( iter != str.end() ){
if(*iter == ' '){
str_vec.push_back('%');
str_vec.push_back('2');
str_vec.push_back('0');
}else str_vec.push_back(*iter);
++iter;
}
str.replace( str.begin(),str.end(),str_vec.begin(),str_vec.end() );
cout<<str<<endl;
}
*/
//grading 问题
/*
double ave(int x1,int x2){
return ( static_cast<double>(x1)+static_cast<double>(x2) )/2;
}
int main(){
int p,t,g1,g2,g3,gj;
double result;
while(cin>>p>>t>>g1>>g2>>g3>>gj){
int tolerance1 = abs(g1-g2);
int tolerance2 = abs(g1-g3);
int tolerance3 = abs(g2-g3);
if( tolerance1 <= t ) result = ave(g1,g2);
else if( tolerance2 <= t && tolerance3 <= t ) {
if( g1 >= g2 ) result = ( g1>g3 ? g1 : g3 );
else result = ( g2>g3 ? g2 : g3 );
}
else if( tolerance2 <= t || tolerance3 <= t ) result = ( tolerance2 > tolerance3 ? ave(g2,g3):ave(g1,g3) );
else result = gj;
cout.setf(ios::fixed); //按点输出显示
cout<<setprecision(1)<<result<<endl;
}
return 0;
}
*/
//插入排序
/*
int main(){
}
void sort_list( list<int> &list_int){
list<int>::iterator iter = ++list_int.begin();
list<int>::iterator temp_iter ;
while( iter != list_int.end() ){
temp_iter = iter;
while( temp_iter != list_int.begin() ){
if(*temp_iter > *--temp_iter ) {
int change = *--temp_iter;
*--temp_iter = *temp_iter;
*temp_iter = change;
--temp_iter;
}else{
break;
}
}
++iter;
}
}
*/
//链表插入排序 accept
/*
class List{
public:
List(int x = 0) : val(x),next(0) {}
int val;
List *next;
};
void insertList(List *head){
if(head == 0) return ;
List *pre_start = head;
List *start = head->next;
while( start != 0){
List *pre_change = 0;
List *change = head;
while( change != start ){
if(change == head ){
if( change->val >= start->val ){
pre_start->next = start->next;
start->next = change;
head = start;
start = pre_start->next;
break;
}else{
pre_change = change;
change = change->next;
}
}else{
if( change->val >= start->val ){
pre_change->next = start;
pre_start->next = start->next;
start->next = change;
start = pre_start->next;
break;
}else{
pre_change = change;
change = chang
评论0