ホームページ > 記事 > ウェブフロントエンド > codeforces 260 div2 A、B、C_html/css_WEB-ITnose
A: 水の質問、構造を並べ替えた後、2 つの配列の配列が同じかどうかを確認してください。
B: 1、2、3、4 の n 乗をそれぞれ書き出し、5 を法とします。残りが 5 のループセクションがあることがわかります。 %4 = 0 の場合は 4 を出力し、それ以外の場合は 0 を出力します。
大きな数値を書き込んで剰余を取るだけです。
B. Fedya and Maths
テストごとの制限時間
1 秒
テストごとのメモリ制限
256 メガバイト
入力
標準入力
出力
標準出力
Fedya の研究体育館でのフェディアの数学の宿題は、次の式を計算することです: 与えられた n の値に対して
(1n?+?2n?+?3n?+?4n) を計算することができました。指定された数値 n は非常に大きくなる可能性があります (たとえば、プログラミング言語の整数型を超える可能性があります)。
入力
1 行には 1 つの整数 n (0?≤?n?≤?10105) の数値が含まれます。先行ゼロは含まれません。
出力
先行ゼロなしで式の値を出力します。
サンプルテスト
入力
出力
入力
124356983594583453458888889
出力
注
演算 x mod y は、x を y で除算した後の剰余を取ることを意味します。
最初のサンプルへの注:
#include <algorithm>#include <iostream>#include <stdlib.h>#include <string.h>#include <iomanip>#include <stdio.h>#include <string>#include <queue>#include <cmath>#include <stack>#include <ctime>#include <map>#include <set>#define eps 1e-9///#define M 1000100///#define LL __int64#define LL long long///#define INF 0x7ffffff#define INF 0x3f3f3f3f#define PI 3.1415926535898#define zero(x) ((fabs(x)<eps)?0:x)using namespace std;const int maxn = 1000010;int main(){ string s; while(cin >>s) { int n= s.size(); int cnt = s[0]-'0'; for(int i = 1; i < n; i++) { cnt %= 4; cnt = (cnt*10+(s[i]-'0'))%4; } if(cnt%4 == 0) cout<<4<<endl; else cout<<0<<endl; }}C:あなた、いくつかの数字、あなた数値を取得した場合は、その数値より 1 大きい数値と 1 小さい数値が削除されます。取得できる最大の数値の合計を求めます。
最初に数値に基づいてハッシュし、それを 1 回線形に dp します。 dp[i][1] = ma(dp[i-2][0], dp[i-2][1]) + vis[ i ]*i,dp[i][0] = max(dp[i-1][0], dp[i-1][1]) 1 はこの数値を取得することを意味し、0 はこの数値を取得しないことを意味します。データ型はlonglongである必要があることに注意してください。
C. 退屈
テストごとの制限時間
1 秒
テストごとのメモリ制限
256 メガバイト
入力
標準入力
出力
標準出力
アレックスは退屈が好きではありません。だから、彼は退屈になるたびにゲームを思いつきました。
プレイヤーは、n 個の整数からなるシーケンスを思いつきました。 1 つのステップで、シーケンスの要素 (ak とします) を選択して削除できます。その際、ak?+?1 および ak?-?1 に等しいすべての要素も から削除する必要があります。このステップはプレーヤーに ak ポイントをもたらします。
Alex は完璧主義者なので、できるだけ多くのポイントを獲得することにしました。
入力
最初の行には整数 n (1?≤?) が含まれています。 n?≤?105) は、Alex のシーケンスに含まれる数値の数を示します。
2 行目には、n 個の整数 a1、a2、...、an (1?≤?ai?≤?105) が含まれます。
出力
Alex が獲得できる最大ポイント数を出力します
入力
21 2
output
10
Note
Consider the third test example. At first step we need to choose any element equal to 2. After that step our sequence looks like this [2,?2,?2,?2]. Then we do 4 steps, on each step we choose any element equals to 2. In total we earn 10 points.
#include <algorithm>#include <iostream>#include <stdlib.h>#include <string.h>#include <iomanip>#include <stdio.h>#include <string>#include <queue>#include <cmath>#include <stack>#include <ctime>#include <map>#include <set>#define eps 1e-9///#define M 1000100///#define LL __int64#define LL long long///#define INF 0x7ffffff#define INF 0x3f3f3f3f#define PI 3.1415926535898#define zero(x) ((fabs(x)<eps)?0:x)using namespace std;const int maxn = 1000010;LL vis[maxn];LL dp[maxn][2];int main(){ int n; while(cin >>n) { int x; memset(vis, 0, sizeof(vis)); memset(dp, 0, sizeof(dp)); for(int i = 0; i < n; i++) { scanf("%d",&x); vis[x] ++; } dp[1][1] = vis[1]; dp[2][1] = vis[2]*2; dp[2][0] = dp[1][1]; for(int i = 3; i <= maxn-10; i++) { dp[i][1] = max(dp[i-2][0], dp[i-2][1])+vis[i]*i; dp[i][0] = max(dp[i-1][0], dp[i-1][1]); } cout<<max(dp[maxn-10][0], dp[maxn-10][1])<<endl; } return 0;}