ブルーブリッジカップ2017第8C言語グループB州の競争運動問題の解決策-運動Jk時間間隔

毎日の質問(92)

Lanqiaoカップ第8回C言語グループB州大会演習

演習J:k回の間隔

ここに画像の説明を挿入
ここに画像の説明を挿入

接頭辞和法

質問のデータ範囲が大きく、プレフィックス合計メソッドは非常に多くの桁数の
C ++コードをトラバースできないため、このメソッドはこの質問の満点を取得できません

#include<iostream>
using namespace std;

int main()
{
    
    
	int n, k;
	int a[100010];
	int s[100010];		//前缀和 
	
	cin >> n >> k;
	s[0] = 0;
	for(int i = 1; i <= n; i++)
	{
    
    
		cin >> a[i];
		s[i] = s[i - 1] + a[i];
	}
	
	long long ans = 0;
	for(int i = 1; i <= n; i++)
	{
    
    
		for(int j = i; j < n; j++)
		{
    
    
			if((s[j] - s[i]) % k == 0)
			{
    
    
				ans++;
			}
		} 
	}
	cout << ans << endl;
	return 0;
} 

実行結果のサンプル:
ここに画像の説明を挿入

数学

C ++コード:

#include<iostream>
#include<map>
using namespace std;

int n, k;
int a[100010];
int s[100010];
map<int, int> cnt;
int main()
{
    
    
	cin >> n >> k;
	s[0] = 0;
	cnt[0] = 1;
	for(int i = 1; i <= n; i++)
	{
    
    
		cin >> a[i];
		s[i] = (s[i - 1] + a[i]) % k;
		cnt[s[i]]++;
	}
	long long ans = 0;
	for(int i = 0; i < k; ++i)
	{
    
    
		ans += (long long)cnt[i] * (cnt[i] - 1) / 2;
	}
	cout << ans << endl;
	return 0;
}

今後も更新していきます。私の記事が気に入ったら、忘れずに3回続けてクリックしてください。コレクションを高く評価してフォローしてください。あなたのいいね、フォロー、コレクションのそれぞれが、これからの私の無限のモチベーションになります。↖(▔▽▔)↗ご支援ありがとうございます!

おすすめ

転載: blog.csdn.net/qq_44631615/article/details/104762318