ゲーム:
http://oj.hzjingma.com/contest/view?id=69
質問A:あるかないように、これは問題(文字列トラバーサル)であります
質問C:ダン蓮のクアン、甲は、骨太(または数学的な暴力の列挙の組み合わせ)
質問D:水のChoudao流れ、トースト心配心配心配ピン(バイナリ列挙)
質問E:ラウンド、そして世界のために左手右手側は、ソウル(数学)を警告することができ
質問F:算術幾何公差は、共通比必要な項目(思考速い+アナログ+パワー)を介して連結されています
質問G:(貪欲)汚れスローとして全体の後退損益、名声と富を見抜きます
質問H:宝のコンセプトエビを分離するよう、万円以上の反射光(BFS、BFSを使用することが知られているアイデアを、理解)
質問I:無力拒否され、奇跡を知ることが発生する可能性がありますか(しません)
質問A:あるかないように、これは問題(文字列トラバーサル)であります
プログラミング、読書などトラバーサルの使用は、文字の数をカウントします。手紙の最後に、最大出力数
#include<bits/stdc++.h>
using namespace std;
int cnt[30], A[30];
int main()
{
memset(cnt, 0, sizeof(cnt));
memset(A, 0, sizeof(A));
string s;
vector<string> passages;
freopen("input.txt", "r", stdin);
while(cin >> s)
{
passages.push_back(s);
}
for(auto p : passages)
{
for(int i = 0;i < p.size(); ++i)
{
// 不区分大小写
if(p[i] >= 'a' && p[i] <= 'z') ++cnt[p[i] - 'a'];
if(p[i] >= 'A' && p[i] <= 'Z') ++cnt[p[i] - 'A'];
}
cout << endl;
}
int res = 0;
for(int i = 0;i < 26; ++i)
{
res = max(res, cnt[i]);
}
cout << res << endl;
return 0;
}
質問B:リトル狙撃兵開始98K(数学:確率論)
所望の式:。ここで、Vは、ショット数で、Pは確率がに対応されています
最初のショットでは、V = 1は、その後、確率は0.75である場合
*(0.75 * 0.9)= - 2 Vは、最初のショットでは、第二のガンは、その後確率は(0.75 L)ではない場合
*(1 - 0.9 * 0.75)*(0.75 * 0.9 * 0.9) - V = 3は、第一及び第二のガンは、次いで、確率(0.75リットル)第ガンでないとき
<0.5これまでのヒット確率まで。
だから、レコードが(いない最後の確率で、常に疲れにある)変数の記録その変数の確率ではありません前に変数のレコードが何度も、何度か撮影しているプログラム、インチ (期待は、それぞれ蓄積の確率*の数を含むことです)
#include<bits/stdc++.h>
using namespace std;
int main()
{
int cnt = 1; // 第几次射击
double res = 0;
double get = 0.75; // 这次中的概率
double p = 1; // 前几次都不中概率
while(get >= 0.5)
{
res += p * get * cnt; // 第几次射击时的期望累加
++cnt; // 射击次数增加
p *= (1.0 - get); // 相当于上一次不中,也就是累乘不中概率
get *= 0.9; // 这次中的概率
}
printf("%0.6lf\n", res);
return 0;
}
質問C:ダン蓮のクアン、甲は、骨太(または数学的な暴力の列挙の組み合わせ)
考え、組合せ論
すなわち、時間が挿入し、5,4,3,3であり、全体として有名な4つのための全体、次いで残りならびに16日(16空の17日間)としてそれぞれ必要とされます合計があるかもしれないとき:17 * 18 * 19 * 20 = 116280。(17最初に挿入し、空にしてから挿入し、18空; 19、空、挿入; 20、空、最後のインサートA)
2、暴力列挙を考えます
私たちは、それぞれの時間を読み始めるの傑作を列挙し、それは完全な要件を満たしていない、とすることができるプログラムを決定します。つまり、この有名な日の各読み取りは、他を読み取ることができません。
私たちは、VIS変数を使用して読んwhether'veあなたが読んだことがあれば、毎日記録することができ、我々は、このプログラムは可能ではない、読んで。
#include<bits/stdc++.h>
using namespace std;
bool isCan(int a, int b, int c, int d)
{
int vis[40];
memset(vis, 0, sizeof(vis)); // 记录 31 天的读书情况
for(int i = 0; i < 5; ++i) vis[a + i] = 1; // 第一本名著 5 天
for(int i = 0;i < 4; ++i) // 第二本 4 天
{
if(vis[b + i] == 1) return false; // 如果这天已经读了,那么就不能再读了
vis[b + i] = 1;
}
for(int i = 0;i < 3; ++i)
{
if(vis[c + i] == 1) return false;
vis[c + i] = 1;
}
for(int i = 0;i < 3; ++i)
{
if(vis[d + i] == 1) return false;
vis[d + i] = 1;
}
return true;
}
int main()
{
int cnt = 0;
for(int a = 1; a <= 27; ++a) // 5
{
for(int b = 1; b <= 28; ++b) // 4
{
for(int c = 1; c <= 29; ++c) // 3
{
for(int d = 1;d <= 29; ++d) // 3
{
if(isCan(a, b, c, d)) ++cnt;
}
}
}
}
cout << cnt << endl;
return 0;
}
質問D:水のChoudao流れ、トースト心配心配心配ピン(バイナリ列挙)
新しい番号を形成するために一緒に22の総数は、0~12の前記選択された数、。
私たちは、唯一の2例は、それは、0または1であり、取る取るか22番、あらゆる数のため、バイナリ列挙体を使用することができます。したがって、2 ^ 22の合計は、4E6にほぼ等しいです。それはタイムアウトしません。
我々はバイナリを列挙するので、各ビットは、この番号に対応するか、取らないように、撮影した場合は、疲れているとします。また、我々はそれがこのスキームが成り立たないことを、> 12であれば、数1から、この借入を判断する必要がありますので、最後は唯一、12を取ることに注意してください。
次いで、すべての場合の数を算出し、集合統計情報(複製、デエンファシスが存在してもよいです)。
- (その大部分を構成してもよい)で数セットの合計(1695):最後に、答えは答えはあるので、番号を構成することができない、依頼することです
#include<bits/stdc++.h>
using namespace std;
int nums[22] = {3,5,7,11,13,19,23,29,31,37,41,53,59,61,67,71,97,101,127,197,211,431};
set<int> recd;
int main()
{
recd.clear();
int lim = (1 << 22);
for(int i = 0;i < lim; ++i)
{
int cnt = 0;
int res = 0;
int tep = i;
for(int j = 0;j < 22; ++j)
{
if((tep >> j) & 1)
{
++cnt;
res += nums[j];
}
}
if(cnt <= 12)
{
recd.insert(res);
}
}
int cnt = 1695;
cout << cnt - recd.size() << endl;
return 0;
}
質問E:ラウンド、そして世界のために左手右手側は、ソウル(数学)を警告することができ
、算出された値である主題によると、私たちは、描画することでそれを見ることができます
すなわち、4回、三角形の面積の4倍のセクタ領域。
三角形、二つの側面、ピタゴラスの定理を求めて下、及びS = 1/2 * *高底の良いエリアを探しています
セクタ領域の場合: θはラジアン単位の角度であり、我々はAの後に与えるため、ラジアン三角形(= 4/3 COSA)でその角度を見つけることができ、発明者らは、A + A +θ= PI / 2。次に、θを見つけることができます。
残りは、コードの値を求めることです
#include<bits/stdc++.h>
using namespace std;
const double PI = 3.14159265358979;
int main()
{
double res = 3.0 * sqrt(7.0) + 8.0 * (PI / 2.0 - 2.0 * acos(3.0 / 4.0));
printf("%0.2lf\n", res);
return 0;
}
質問F:算術幾何公差は、共通比必要な項目(思考速い+アナログ+パワー)を介して連結されています
私たちは、V1 = B /、V2 = C / B。最大のために、それは可能な限り大きく公比qのうち必要
これは、V1、V2が、および= V2を= V1を満たすことができるQの最大の力の一つ見つけるためにする必要があります。
いくつかの特別な例:
1)B = A、B、またはC =時間、公比をq = 1の場合
2)V1 == v2の場合、それは直接、Q = V1とすることができます。
残りのケースでは、我々はすでにそれをq = v1のではないでしょうので、その後、最も可能性が高い(処方から見て開始する必要があり、一般的な比率ではありません(最小v1とv2はv1の中に保存されている)V1を知っているということです、その後、できるだけ大きくQを作るために、その後、Q ^ 2 = V 1、Q = SQRT(V1)、2まで、列挙Q)
それは、Q及びV1は、V2は、例えば、電源関係(あると判断され、Q ^ X = V1、V1の%のQ == 0、アップV1 == 1まで、またはQに満足されていないと言うことです^ X = V1)
最終的な結果の等比数列のQ後、その項目Nは、式に従って、= A1 * Q ^( - 1 N)です。
データがnの範囲以来、私たちは、解決するには、高速の電力を使用します。
#include<bits/stdc++.h>
using namespace std;
#define LL long long
const LL MOD = 1e9;
LL qpow(LL x, LL y)
{
LL ans = 1;
while(y)
{
if(y & 1) ans = ans * x % MOD;
x = x * x % MOD;
y >>= 1;
}
return ans;
}
bool isCan(LL x, LL y) // x == y ^ n
{
while(x)
{
if(x == 1) return true;
if(x % y != 0) return false;
x /= y;
}
}
int main()
{
LL a, b, c, N;
cin >> a >> b >> c >> N;
if(a == b || a == c) cout << a << endl;
else
{
LL res = 0, q = 0;
LL v1 = b / a, v2 = c / b;
if(v1 > v2) swap(v1, v2);
if(v1 == v2) q = v1;
else
{
q = v1;
int temp = sqrt(v1);
for(int i = temp + 1; i >= 2; --i)
{
if(isCan(v1, i) && isCan(v2, i))
{
q = i;
break;
}
}
}
res = a * qpow(q, N - 1) % MOD;
cout << res << endl;
}
return 0;
}
質問G:(貪欲)汚れスローとして全体の後退損益、名声と富を見抜きます
我々は、この時点で余剰品の補充と、最初、残り物の前に数日があるかもしれない、特定の日需要。
補充した場合、さらに悪い、彼らは新しいを購入する必要があります
あなたはリフトを購入することができますので、購入のためとして、私たちはその日を見つけると、すべての最も高価なの前で(これは最小のコストを行い、可能のように、このようので、我々は先に、フロント買いで同等のです)。
だから、購入価格のために、私たちは、この日のために探していると、以前のすべての購入のための最低価格をすることができます。
特に注目すべきなのは、ボックスのレモンを買うに起因する、すべての注意を払う= 80 5×16でした。一方、あなたが80で割り切れることができないならば、我々は少しを購入したいという、新しいレモンを購入するが、この方法は、残り物があるでしょう(レコード)
#include <bits/stdc++.h>
using namespace std;
#define LL long long
int main()
{
LL n, a, b;
cin >> n >> a >> b;
LL miPa = 1000, miPb = 1000;
LL hasPa = 0, hasPb = 0;
LL res = 0;
for(int i = 0;i < n; ++i)
{
LL c, pa, pb;
cin >> c >> pa >> pb;
miPa = min(miPa, pa);
miPb = min(miPb, pb);
res += c * a * miPa;
if(hasPb >= c * b) // 剩货超过需要的,那么不需要重新买
{
hasPb -= c * b;
}
else // 否则,说明不够,要重新买
{
LL needPb = c * b - hasPb;
hasPb = 0;
if(needPb % 80 == 0)
{
res += (needPb / 80) * miPb;
}
else
{
LL tep = (needPb / 80) + 1; // 不被整除,说明多买一盒
res += tep * miPb;
hasPb = tep * 80 - needPb; // 多出来的剩货,要记录
}
}
}
cout << res << endl;
return 0;
}
質問H:宝のコンセプトエビを分離するよう、万円以上の反射光(BFS、BFSを使用することが知られているアイデアを、理解)
この質問は、BFSと知ることですが、思考の方法の種類がわかりません。
私は理解していないので、コードは他の人から提出されたリンクを見ることができますが、アイデアは知りませんでした。
質問I:無力拒否され、奇跡を知ることが発生する可能性がありますか(しません)
私は理解していないので、コードは他の人から提出されたリンクを見ることができますが、アイデアは知りませんでした。
質問J:世界の終わり、私はあなたの手を取るよ(ありません)
私は理解していないので、コードは他の人から提出されたリンクを見ることができますが、アイデアは知りませんでした。