列表

详情


NC201685. 染色图

描述

定义一张无向图 可染色的当且仅当存在函数 满足对于 中的任何一条边 ,都有
定义函数 的值为所有包含 个点的无自环、无重边的 可染色无向图中的边数最大值。举例来说,
现在给出三个整数 ,你需要求解:

输入描述

第一行输入一个整数 ,表示数据组数。
对于每组数据,输入三个整数

输出描述

对于每组数据,输出一行一个整数表示答案。

示例1

输入:

5
3 1 1
3 2 2
5 2 4
10 3 9
1000 123 789

输出:

0
2
23
280
332539617

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 7ms, 内存消耗: 468K, 提交时间: 2020-01-20 16:31:05

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int T;
const int two=499122177;
const int mod=998244353;
ll n,x,y,tmp;
int main()
{
    scanf("%d",&T);
    while(T--)
    {
    	ll ans=0;
    	scanf("%lld%lld%lld",&n,&x,&y);
    	for(ll l=x,r;l<=y;l=r+1)
    	{
    		r=n/(n/l);
    		if(r>y)	r=y;
    		tmp=n/l;
    		ans+=(n*n%mod-n-2*n%mod*tmp%mod+mod)%mod*(r-l+1)%mod+((r-l+1)*(r+l)/2)%mod*((tmp*tmp+tmp)%mod)%mod;
    		ans%=mod;
		}
		ans=(ans+mod)%mod;
		ans=ans*two%mod;
		printf("%lld\n",ans);
	}
    return 0;
}

C++11(clang++ 3.9) 解法, 执行用时: 7ms, 内存消耗: 484K, 提交时间: 2020-04-26 22:13:51

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll p=998244353;
int main(){
	ll t1,n,l,r,le,re,x,st,ed,ans;
	scanf("%lld",&t1);
	while(t1--){
		scanf("%lld%lld%lld",&n,&le,&re);
		ans=0;
		for(l=le;l<=re;l=r+1){
		 r=min(re,n/(n/l));
		x=n/l;
		st=n%l;
		ed=st-(r-l)*x;
		ans=(ans+(st+ed)*(r-l+1)/2%p*x%p+x*(x-1)/2%p*((l+r)*(r-l+1)/2%p)%p)%p;
	  }
	    ans=(n*(n-1)/2%p*(re-le+1)%p-ans+p)%p;
	    printf("%lld\n",ans);
	}
}

上一题