首页 > 其他分享 >VP CSP-J2019 江西

VP CSP-J2019 江西

时间:2024-07-25 22:40:21浏览次数:7  
标签:int ll VP maxn ans J2019 CSP

不是很理解为什么江西CSP单列一年,题目难度吊打CSP-J2024

T1 P5681 [CSP-J2019 江西] 面积

签到题,但需要注意面积相等情况

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a,b,c;
int main(){
	cin >> a >> b >> c;
	if(a*a>b*c){
		cout << "Alice";
	}else{
		cout << "Bob";
	}
	return 0;
}

T2 P5682 [CSP-J2019 江西] 次大值

先考虑相似问题,若寻找最大值,则必然为严格次大数和最大数相模结果,猜测次大值也应该为较大数相模,玩了一会没找到很对的结论,于是直接把最大30个数字相模,取次大就过了

#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+5;
vector<int> a;
vector<int> ans;
map<int,bool> flag; 
int n;
int main(){
	cin >> n;
	for(int i=1;i<=n;i++){
		int x;
		cin >> x;
		if(!flag[x]) a.push_back(x);
		else ans.push_back(0);
		flag[x]=true;
	}
	sort(a.begin(),a.end());
	
	for(int i=a.size()-1;i>=max(0,(int)a.size()-30);i--){
		for(int j=0;j<a.size();j++){
			if(i!=j) ans.push_back(a[j]%a[i]); 
		} 
	}
	if(ans.size()==1){
		cout << -1;
		return 0;
	} 
	sort(ans.begin(),ans.end());
	//for(int i=0;i<ans.size();i++) cout << ans[i] << " ";
	for(int i=ans.size()-2;i>=0;i--){
		if(ans[i+1]!=ans[i]){
			cout << ans[i];
			return 0;
		}
	}
	cout << -1;
	return 0;
}

T3 P5683 [CSP-J2019 江西] 道路拆除

通过把玩小数据,发现最有解必然为$s1$,$s2$通过通过路径汇为一点,再从一点到原点(可通过反证法证明)。考虑到对于每一段简单路径,所需时间即为经过道路数,于是从原点,$s1$,$s2$分别跑一遍$dfs$,枚举汇集点即可,复杂度$O(n)$

#include<bits/stdc++.h>
using namespace std;
const int maxn=3005;
struct Node{
	int x,t;
};
vector<int> e[maxn];
int Tim[maxn],T1[maxn],T2[maxn],n,m;
int s1,t1,s2,t2;
bool Visit[maxn];
queue<Node> q;
void dfs1(){
	q.push((Node){1,0});
	Visit[1]=1;
	while(q.size()){
		int x=q.front().x;
		int t=q.front().t;
		q.pop();
		Tim[x]=t;
		for(int i=0;i<e[x].size();i++){
			int to=e[x][i];
			if(Visit[to]) continue; 
			Visit[to]=true;
			q.push((Node){to,t+1});
		}
	}
}
void dfs2(){
	memset(Visit,0,sizeof(Visit));
	q.push((Node){s1,0});
	Visit[s1]=1;
	while(q.size()){
		int x=q.front().x;
		int t=q.front().t;
		q.pop();
		T1[x]=t;
		for(int i=0;i<e[x].size();i++){
			int to=e[x][i];
			if(Visit[to]) continue; 
			Visit[to]=true;
			q.push((Node){to,t+1});
		}
	}
}
void dfs3(){
	memset(Visit,0,sizeof(Visit));
	q.push((Node){s2,0});
	Visit[s2]=1;
	while(q.size()){
		int x=q.front().x;
		int t=q.front().t;
		q.pop();
		T2[x]=t;
		for(int i=0;i<e[x].size();i++){
			int to=e[x][i];
			if(Visit[to]) continue; 
			Visit[to]=true;
			q.push((Node){to,t+1});
		}
	}
}
int main(){
//	freopen("P5683.in","r",stdin);
	
	cin >> n >> m;
	for(int i=1;i<=n;i++){
		Tim[i]=T1[i]=T2[i]=maxn*2;
	}
	for(int i=1;i<=m;i++){
		int x,y;
		cin >> x >> y;
		e[x].push_back(y);
		e[y].push_back(x);
	} 
	cin >> s1 >> t1 >> s2 >> t2;
	dfs1();
	dfs2();
	dfs3(); 
	int ans=-1;
	for(int i=1;i<=n;i++){
	//	cout << T1[i] << " " << T2[i] << endl;
		int tt1=Tim[i]+T1[i];
		int tt2=Tim[i]+T2[i];
		if(tt1>t1) continue;
		if(tt2>t2) continue;
		if(ans==-1){
			ans=T1[i]+T2[i]+Tim[i];
		}else{
			ans=min(T1[i]+T2[i]+Tim[i],ans);
		} 
	}
//	cout << ans << " ";
	if(ans==-1){
		cout << -1;
	}else{
		cout << m-ans;
	} 
	return 0;
}

T4 P5684 [CSP-J2019 江西] 非回文串

发现正向构造非回文串较复杂,于是考虑先计算全排列数量,再减去回文情况。记得及时取模,以及乘法逆元的运用

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll MOD=1e9+7;
const int maxn=2005;
ll n;
string s;
ll c[maxn];
ll f[maxn];
void init(){
	f[0]=1;
	for(int i=1;i<maxn;i++) f[i]=f[i-1]*i,f[i]%=MOD;
}
ll Pow(ll a,ll b){
	ll Base=a;
	ll Re=1;
	while(b){
		if(b&1){
			Re*=Base;
			Re%=MOD;
		}
		Base*=Base;
		Base%=MOD;
		b>>=1;
	}
	return Re;
} 
int main(){
	init();
	cin >> n;
	cin >> s;
	for(int i=0;i<n;i++){
		c[s[i]-'a'+1]++; 
	}
	ll Base=f[n];
	bool flag=!(n%2);
	ll Dt=f[n/2];
	for(int i=1;i<=26;i++){
		if(c[i]%2==1){
			if(flag){
				cout << Base;
				return 0;
			}		
			flag=true;
		}	
		Dt*=f[c[i]];
		Dt%=MOD;
		Dt*=Pow(f[c[i]/2],MOD-2);
		Dt%=MOD;
	}
	cout << ((Base-Dt)%MOD+MOD)%MOD;
	return 0;
}

标签:int,ll,VP,maxn,ans,J2019,CSP
From: https://www.cnblogs.com/Ding0023/p/18324290

相关文章

  • YOLOv8改进 | 主干网络 | ⭐重写星辰Rewrite the Stars⭐【CVPR2024】
     秋招面试专栏推荐:深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转......
  • 暑假集训CSP提高模拟7
    这个T1的\(n^{3}\)的SPJ效率还是太慢了,膜拜SPJ大神学长,还会画画A.Permutations&Primes这题感觉挺水的但是感觉有不是那么水,主要还是因为我赛时没想出正解,在打的表里找了一组好看的规律,打上了然后就过了.对偶数来说,我的规律正好是正解的特化,但是对奇数来说,我的规律就......
  • 「模拟赛」暑期集训CSP提高模拟6(7.23)
    \(140pts,Rank23\)题目列表A.花间叔祖B.合并rC.回收波特D.斗篷花间叔祖\(98pts\)题意:给定一个数组,选择一个大于等于2的模数,然后把数组中的数变成\(mod\)该模数后的数。只能操作一次,问操作后最少有几种不同的数。赛事分析:开始5分钟想到了算\(a_i\)中所有......
  • 汉明权重(Hamming Weight)(统计数据中1的个数)VP-SWAR算法
    汉明权重(HammingWeight)(统计数据中1的个数)VP-SWAR算法定义汉明重量是一串符号中非零符号的个数。它等于同样长度的全零符号串的汉明距离(在信息论中,两个等长字符串之间的汉明距离等于两个字符串对应位置的不同字符的个数)。汉明重量在常见的数据位符号串中,它是1的个数。......
  • 暑假集训csp提高模拟7
    赛时rank42,T180,T213,T30,T420在T4挂死了,赛时胡了一个挺没有前途的\(O(n\log_2^3n)\)的做法,结果赛后发现假了,没有时间打T2,T3的暴力了。糖T1Permutations&PrimesPermutations&Primes赛时有一个特判\(n=3\)错了,挂了20pts结论非常显然,1放中间,2、3各放一边,剩下的随便......
  • 暑假集训CSP提高模拟7
    暑假集训CSP提高模拟7组题人:@KafuuChinocpp|@Chen_jr\(T1\)P122.Permutations&Primes\(20pts\)原题:CF1844BPermutations&Primes假的构造策略,拿到了\(20pts\)。若\(n\)为奇数,则将\(1\)放在\(\left\lceil\frac{n}{2}\right\rceil\)的位置上,前一半......
  • 「模拟赛」暑期集训CSP提高模拟5(7.22)
    \(140pts,Rank24\)题目列表:简单的序列简单的字符串简单的困难的图论简单的序列\(100pts\)题意:gtm1514不喜欢序列。但是一天他拿到了一个序列。这个序列非常杂乱,于是gtm1514想要整理一下这个序列。但是由于他非常的菜,他只会进行一个操作:选择一个\(ai\),把它变......
  • CSP 2023 Round 2 游记
    Day?最近\(WHK\)下滑严重,月考排名掉到了\(50\)多了,想着等着这次\(CSP\)完就先退役,也就没想着拿奖去复习。Day0考前周五没怎么搞\(OI\),学校作业多到爆炸,晚自习老师一直讲课,都要睡着了,完事和WSL一起散散步就出校门了,结果WSL却跑回去跑800,说是为了运动会(,卷神。Day1-......
  • CSP 模拟 4
    T1WhiteandBlack原题ARC148CLightsOutonTree最小和无解都不用管,不能下改上,所以从上往下,遇到就反转。一定的观察后发现,当这个点的颜色与父亲不同时,会有贡献,然后直接就做完了。点击查看代码#include<bits/stdc++.h>typedeflonglongll;typedefunsignedlonglong......
  • CSP 模拟 3
    joke3579场,T1abc猜想([ARC111A]SimpleMath2)直接\(\bmod\c\),很难做,不难想到换一个和\(c\)有关的模数,\(c^2\)很好,因为它除以\(c\)再模上\(c\)后为\(0\)。求\(x=a^b(\bmod\c^2)\),\(a^b=k\cdotc^2+x\),除以\(c\)模\(c\)后,前面那个东西没了,只剩\(x\),所以答......