文章目錄
- A:Second Order Statistics
- B:Die Roll
- C:Hexadecimal's Numbers
- D:Train and Peter
- E:Running Student
- F: Registration system
A:Second Order Statistics
鏈接:CF22A
題意:
給定一個陣列,輸出其中第二小的整數(相等的整數只計算一次),
思路:
去重排序;
參考代碼:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
scanf("%d",&n);
vector<int> all; // 這里采用vector存盤
for (int i = 1; i <= n; ++i)
{
int x; scanf("%d",&x);
all.push_back(x);
}
// 去重排序下面兩行代碼就行
sort(all.begin(), all.end());
all.erase(unique(all.begin(), all.end()), all.end()); // unique函式是將all里面的相同的放到后面去,并回傳第一個的位置
if( all.size() == 1) puts("NO"); // 然后將后面的洗掉就能實作了去重排序
else cout << all[1] << endl;
return 0;
}
B:Die Roll
鏈接:CF9A
題意:
小Y,小W和小D進行扔骰子(六面)游戲,誰投出的點數最大算誰勝利,現在已知小Y和小W的得分,請你幫小D求出她獲勝的概率
注意:
1.以"分子/分母"輸出,特別的,若不可能獲勝輸出"0/1",100%獲勝輸出"1/1"
2.小Y和小W非常紳士,如果小D的得分和他們一樣,他們也會算作小D獲勝
思路:
求出Y,M點數最大值,然后逐步分析即可
int a, b, c;
cin >>a >> b ;
c=max(a,b);
if(c == 4)cout<<"1/2";
else if(c == 1) cout << "1/1";
else if(c == 2) cout << "5/6";
else if(c == 3)cout << "2/3";
else if(c == 5)cout << "1/3";
else if( c == 6)cout << "1/6";
C:Hexadecimal’s Numbers
鏈接:CF9C
題意:
輸入n,輸出1-n的自然數中各數位只包含0和1的數的個數,
思路:
可以發現,各數位是0,1的數從小到大:1,10,11,100,101, 110,111···
如果從1開始可以發現;1 -> 10 / 11,然后10 - > 100 / 101, 11 -> 110, 111·····
參考代碼:
#include<bits/stdc++.h>
using namespace std;
long long ans, n;
void solve(long long x)
{
if(x > n) return ;
ans ++;
solve( x * 10);
solve( x * 10 + 1);
}
int main()
{
scanf("%lld",&n);
solve(1);
printf("%lld\n",ans);
return 0;
}
D:Train and Peter
鏈接:CF8A
題意:
Peter在坐火車,前后看見了兩個序列,給出一個總序串列示路徑,判斷火車是在前進還是后退
思路:
假設s是總序列,A,B分別為Peter前后看見的序列,如果在s序列中找到了A并且在A的后面又找到了B則可以判斷是在前進,然后將s序列反轉,同樣判斷是否是后退
string str1,str2;
char a;
str1.find(str2); //在字串str1中查找str2,回傳str2中首個字符在str1中的地址
str1.find(str2,2); //從str1的第2個字符開始查找str2
str.find(a);//在str1中查找字符a并回傳第一個查找到的地址
str1.find(str2,2,3) //在str1中的第二個字符開始查找前str2的前3個字符
//沒有找到回傳npos即使-1;
參考代碼:
int main()
{
bool f=0,b=0;
string s, A, B;
cin >> s >> A >> B;
int len = s.size();
if(s.find(A) < len && s.find(B, s.find(A) + A.size()) < len)
f=1;
reverse(s.begin(),s.end());
if(s.find(A) < len && s.find(B, s.find(A) + A.size()) < len)
b=1;
if(f && b) cout<<"both";
else if(f) cout<<"forward";
else if(b) cout<<"backward";
else cout<<"fantasy";
return 0;
}
E:Running Student
鏈接:CF9B
題目:
小明上學,在二維坐標系中,給出公交站臺的個數,小明的運動速度,公交車的移動速度,以及站臺的坐標(xi,0),求在那個站臺下車時間最短
思路:
列舉每個站臺即可,因為上車站不能下車,所以需要從第二個站臺開始列舉
參考代碼:
ll n, vb, vs, x, y, a[100010], ans;//這里要用ll的原因是因為后面計算距離的時候可能會爆int
double min_1 = INF, min_2 = INF;
int main()
{
cin >> n >> vb >> vs;
for(int i = 1; i <= n; i++ ) cin >> a[i];
cin >> x >> y;
for(int i = 2; i <= n; i++){
double k = (double) a[i] / vb;
double v= (double) sqrt( (x - a[i] ) * ( x - a[i] ) + y * y ) / vs;
if( k + v <= min_1 && v < min_2)
{
min_1 = k + v;
min_2 = v;
ans = i;
}
}
cout<<ans;
return 0;
}
F: Registration system
鏈接CF4C
題意:
給出一個用戶名(字串),判斷是否存在,不存在輸出YES,存在輸出字串+i,i從1開始逐漸遞增;
思路:
利用map容器存盤
參考代碼:
map<string,int> person;
int main()
{
int n;
cin >> n;
while(n -- )
{
string s;
cin >> s;
if( !person[s] )
{
puts("OK");
person[s]++;
}
else
{
cout << s << person[s]++ << endl;
}
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/263921.html
標籤:其他
上一篇:Bits
下一篇:貪吃蛇--dfs與bfs初步學習
