在牛客網上做的。
老師想知道從某某同學當中,分數最高的是多少,現在請你編程模擬老師的詢問。當然,老師有時候需要更新某位同學的成績.
輸入描述:
輸入包括多組測試數據。 每組輸入第一行是兩個正整數N和M(0 < N <= 30000,0 < M < 5000),分別代表學生的數目和操作的數目。 學生ID編號從1編到N。 第二行包含N個整數,代表這N個學生的初始成績,其中第i個數代表ID爲i的學生的成績 接下來又M行,每一行有一個字符C(只取‘Q’或‘U’),和兩個正整數A,B,當C爲'Q'的時候, 表示這是一條詢問操作,他詢問ID從A到B(包括A,B)的學生當中,成績最高的是多少 當C爲‘U’的時候,表示這是一條更新操作,要求把ID爲A的學生的成績更改爲B。
輸出描述:
對於每一次詢問操作,在一行裏面輸出最高成績.
輸入例子:
5 7 1 2 3 4 5 Q 1 5 U 3 6 Q 3 4 Q 4 5 U 4 5 U 2 9 Q 1 5
輸出例子:
5 6 5 9這道題有兩個陷阱,一是可以循環輸入,二是測試用例中出現了A>B的情況,開始沒注意,後來自己調試才發現。。上機沒有調試怎麼辦啊。。
#include <iostream>
using namespace std;
int main()
{
int n,m,i,j,num1,num2,tempscore,maxscore,start,end;
char ch;
while(cin>>n>>m)
{
int score[n+1];
score[0]=0;
for(i=1;i<=n;i++)
{
cin>>tempscore;
score[i]=tempscore;
}
for(i=0;i<m;i++)
{
cin>>ch>>num1>>num2;
if(ch=='Q')
{
start=min(num1,num2);
end=max(num1,num2);
maxscore=score[start];
for(j=start+1;j<=end;j++)
{
if(score[j]>maxscore)
maxscore=score[j];
}
cout<<maxscore<<endl;
}
else if(ch=='U')
{
score[num1]=num2;
}
}
}
撲克牌遊戲大家應該都比較熟悉了,一副牌由54張組成,含3~A,2各4張,小王1張,大王1張。牌面從小到大用如下字符和字符串表示(其中,小寫joker表示小王,大寫JOKER表示大王):)
3 4 5 6 7 8 9 10 J Q K A 2 joker JOKER
輸入兩手牌,兩手牌之間用“-”連接,每手牌的每張牌以空格分隔,“-”兩邊沒有空格,如:4 4 4 4-joker JOKER
請比較兩手牌大小,輸出較大的牌,如果不存在比較關係則輸出ERROR
基本規則:
(1)輸入每手牌可能是個子,對子,順子(連續5張),三個,炸彈(四個)和對王中的一種,不存在其他情況,由輸入保證兩手牌都是合法的,順子已經從小到大排列;
(2)除了炸彈和對王可以和所有牌比較之外,其他類型的牌只能跟相同類型的存在比較關係(如,對子跟對子比較,三個跟三個比較),不考慮拆牌情況(如:將對子拆分成個子)
(3)大小規則跟大家平時瞭解的常見規則相同,個子,對子,三個比較牌面大小;順子比較最小牌大小;炸彈大於前面所有的牌,炸彈之間比較牌面大小;對王是最大的牌;
(4)輸入的兩手牌不會出現相等的情況。
答案提示:
(1)除了炸彈和對王之外,其他必須同類型比較。
(2)輸入已經保證合法性,不用檢查輸入是否是合法的牌。
(3)輸入的順子已經經過從小到大排序,因此不用再排序了.
輸入描述:輸入兩手牌,兩手牌之間用“-”連接,每手牌的每張牌以空格分隔,“-”兩邊沒有空格,如4 4 4 4-joker JOKER。
輸出描述:輸出兩手牌中較大的那手,不含連接符,撲克牌順序不變,仍以空格隔開;如果不存在比較關係則輸出ERROR。
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
string a="345678910JQKA2";
vector<string> vect;
vect.push_back("joker JOKER");
vect.push_back("JOKER joker");
string line;
string str1,str2;
int pos;
while(getline(cin,line))
{
pos=line.find('-');
str1=line.substr(0,pos);
str2=line.substr(pos+1);
int n1=count(str1.begin(),str1.end(),' ');
int n2=count(str2.begin(),str2.end(),' ');
if(str1==vect[0]||str1==vect[1])
cout<<str1<<endl;
else if(str2==vect[0]||str2==vect[1])
cout<<str2<<endl;
else if(n1==n2)
{
int l=a.find(str1[0]);
int r=a.find(str2[0]);
string ans=l>r?str1:str2;
cout<<ans<<endl;
}
else if(n1==3&&n2!=3)
cout<<str1<<endl;
else if(n1!=3&&n2==3)
cout<<str2<<endl;
else
cout<<"ERROR"<<endl;
}
}