首页 > 其他分享 >CSP-J2022 复盘

CSP-J2022 复盘

时间:2023-08-21 12:12:03浏览次数:29  
标签:J2022 frac int ll sqrt CSP 4n times 复盘

T1 乘方

方法 \(1\):使用快速幂,判断答案是否 \(\geq 10^9\)。

方法 \(2\):特判 \(1\) 的情况,其余的可以直接乘。

此处给出方法 \(2\) 的代码。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a,b;
int main(){
	cin>>a>>b;
	if(a==1)  cout<<1;
	else{
		ll res=1;
		for(int i=1;i<=b;i++){
			res*=a;
			if(res>1e9){cout<<-1;return 0;}
		}
		cout<<res;
	}
	return 0;
}

T2 解密

思路:

记 \(m_i=n_i-e_i \times d_i +2\)。

根据已知信息,可以推出 \(p_i \times q_i=n_i\),\(p_i+q_i=n_i-e_i \times d_i+2=m_i\)。

而 \(n_i,e_i,d_i\) 均为已知数,因此本题转换为:

已知 \(p_i+q_i=m_i\),\(p_i \times q_i=n_i\),求 \(p_i,q_i\)。

\(p_i-q_i=\sqrt{(p_i+q_i)^2-4 \times p_i \times q_i}=\sqrt{{m_i}^2-4n_i}\)

\({p_i}^2-{q_i}^2=(p_i+q_i)(p_i-q_i)=m_i \times \sqrt{{m_i}^2-4n_i}\)

\({p_i}^2+{q_i}^2=({p_i}+q_i)^2-2p_iq_i={m_i}^2-2n_i\)

\(\therefore 2{p_i}^2=m \times \sqrt{{m_i}^2-4n_i}+{m_i}^2-2n_i\)

\({p_i}^2=\frac{m \times \sqrt{{m_i}^2-4n_i}+{m_i}^2-2n_i}{2}\)

\({p_i}=\sqrt{\frac{m \times \sqrt{{m_i}^2-4n_i}+{m_i}^2-2n_i}{2}}\)

\(p_i=\frac{\sqrt{2m_i \times \sqrt{{m_i}^2-4n_i}+2{m_i}^2-4n_i}}{2}\)

注意到 \(2m_i \times \sqrt{{m_i}^2-4n_i}+2{m_i}^2-4n_i\) 是个完全平方公式。

继续化简得 \(p_i=\frac{m_i+\sqrt{{m_i}^2-4n_i}}{2}\)

\(q_i=m_i-p_i=m_i-\frac{m_i+\sqrt{{m_i}^2-4n_i}}{2}=\frac{m_i-\sqrt{{m_i}^2-4n_i}}{2}\)

综上,
\( \begin{cases} p_i=\frac{m_i+\sqrt{{m_i}^2-4n_i}}{2}\\ q_i=\frac{m_i-\sqrt{{m_i}^2-4n_i}}{2} \end{cases} \)

注意如果 \(p_i\) 比 \(q_i\) 大则交换 \(p_i,q_i\)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int INF=0x3f3f3f3f;
ll k,n,d,e;
int main(){
	cin>>k;
	for(int i=1;i<=k;i++){
		cin>>n>>d>>e;
		ll m=n-e*d+2;
		ll tmp1=m*m-4*n;
		if(tmp1<0){
			cout<<"NO"<<endl; 
			continue;
		}
		ll p=(m+sqrt(tmp1))/2;
		ll q=m-p;
		if(p>q)  swap(p,q);
		if(p*q==n&&p>0)  cout<<p<<" "<<q<<endl;
		else  cout<<"NO"<<endl;
	}
	return 0;
}

根据这道题,还可以得出一个普遍的结论:

已知 \(a+b=n,a \times b=m\),


\(\begin{cases} a=\frac{n+\sqrt{n^2-4m}}{2}\\ b=\frac{n-\sqrt{n^2-4m}}{2} \end{cases} \)

T3 逻辑表达式

考场上没有考虑到优化

  #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int INF=0x3f3f3f3f;
string str;
int ch1[200009],ch2[200009],t1[200009],t2[200009],ans1,ans2,ans;
int solve(int l,int r){
	if(l==r)  return (str[l]-'0');
	if(ch2[r]>=l){
		int anst=solve(l,ch2[r]-1);
		if(anst==1){
			ans2++;
			return 1;
		}
		else  return solve(ch2[r]+1,r);
	}
	else if(ch1[r]>=l){
		int anst=solve(l,ch1[r]-1);
		if(anst==0){
			ans1++;
			return 0;
		}
		else  return solve(ch1[r]+1,r);
	}
	else  return solve(l+1,r-1);
}
int main(){
	cin>>str;
	for(int i=0;i<str.size();i++)  ch1[i]=ch2[i]=t1[i]=t2[i]=-1;
	int flr=0;
	for(int i=0;i<str.size();i++){
		if(str[i]=='(')  flr++; 
		if(str[i]==')')  flr--;
		if(str[i]=='&')  t1[flr]=i;
		if(str[i]=='|')  t2[flr]=i;
		ch1[i]=t1[flr];
		ch2[i]=t2[flr];
	}
	ans=solve(0,str.size()-1);
	cout<<ans<<endl<<ans1<<" "<<ans2<<endl;
	return 0;
}



T4 上升点列

我是傻逼。

我把 \(x\) 写成 \(y\) 了。

每个大样例都过了。

\(100pts \to 65pts\)。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
struct star{
	ll x,y;
};
ll n,k,f[509][109];
star s[509];
bool cmp(const star&a,const star&b){
	return a.x<b.x||a.x==b.x&&a.y<=b.y;
}
int main(){
	cin>>n>>k;
	for(ll i=1;i<=n;i++){
		cin>>s[i].x>>s[i].y;
	}
	sort(s+1,s+1+n,cmp);
	ll ans=0;
	for(ll i=1;i<=n;i++){
		f[i][k]=1;
		for(ll j=1;j<i;j++){
			if(s[j].x>s[i].x||s[j].y>s[i].y)  continue;
			ll dis=abs(s[i].x-s[j].x)+abs(s[i].y-s[j].y)-1;
			for(ll l=0;l+dis<=k;l++){
				if(f[j][l+dis]){
					f[i][l]=max(f[i][l],f[j][l+dis]+dis+1);
				}
			}
		}
	}
	for(ll i=1;i<=n;i++){
		for(ll j=0;j<=k;j++){
			ans=max(ans,f[i][j]+j);
		}
	}
	cout<<ans;
	return 0;
} 

标签:J2022,frac,int,ll,sqrt,CSP,4n,times,复盘
From: https://www.cnblogs.com/11jiang08/p/17645675.html

相关文章

  • CSP-J 模拟赛 C 题讲解
    前言鸣谢:感谢LHT大佬的推荐、GCK大佬的提醒以及LBJ大佬帮我接龙。原题链接随手给大家扔一份吧。题目大意给你一个\(1\)到\(n\)的数列,当\(a_i<a_{i-1}\)的时候(大于号和小于号其实不用管,因为最后所有方案都会遍历到,对答案没有影响)放置一个红色灯笼,否则放置一个绿......
  • CSP模拟26
    可做场,拜谢fengwu老师。A.Reversi(AGC031B)题目链接一眼切了设$dp_i$表示考虑到第$i$个石头的总方案数。可由两种情况转移,不选择染色和选择染色,不染色直接由$dp_{i-1}$转移过来,染色由上一个和当前颜色相同的的石头转移过来,相当于把两个石子之间的染色。因为一......
  • CSP模拟赛题解
    目录CSP模拟16T1:糖果CSP模拟17T1:弹珠游戏T2:晚会CSP模拟18T1:TheThirdLetterT2:InaoftheMountainCSP模拟19T1:StrangeFunctionT2:DZYLovesModificationCSP模拟21T1:[CEOI2016]kangarooT2:[JOI2023Final]Advertisement2T3:YourCSP模拟22T1:TheChildandToyCSP模拟16T1:......
  • CSP模拟25
    炒币、凑数、同构、最近公共祖先A.炒币举个栗子,对于序列\[1,4,5\]在\(1\)处买进,在\(5\)处卖出是最优的选择。为什么不选择在\(4\)处买,因为\(4\)处成本更高,所以我们可以把一段递增或递减的序列缩成几个互不相同的点。例如\[1,3,5,3,2,7\]变成\[5,2,7\]只有这......
  • 【csp-3】排列与组合
    组合:n个数选m个数,从小到大第k个选择是什么#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>#include<bits/stdc++.h>usingnamespacestd;intflag,n,m,a[21],vis[21],k,sum;voiddfs(intnow,intlast){if(flag==1)re......
  • 【考后总结】8 月 CSP-S 模拟赛 7
    8.19CSP模拟25给我一首歌的时间-周杰伦雨淋湿了天空毁得很讲究你说你不懂为何在这时牵手我晒干了沉默悔得很冲动就算这是做错也只是怕错过在一起叫梦分开了叫痛是不是说没有做完的梦最痛迷路的后果我能承受这最后的出口在爱过了才有能不能给我一首歌的时......
  • CSP模拟24
    yspm专场2。原神派蒙、药水泡面、医生拍门、浴室泡沫A.原神派蒙思路结论:如果序列原先就合法,答案为\(0\);否则,最多使用两个寄存器。我们对\(i\rightarrowa_i\)建边得到若干个环,我们单独考虑一个环如何操作。对于一个长度为\(4\)的数列,再包含两个寄存器,设两个寄......
  • 2023北京/杭州/深圳CSPM-3国标项目管理中级认证招生
    CSPM-3中级项目管理专业人员评价,是中国标准化协会(全国项目管理标准化技术委员会秘书处),面向社会开展项目管理专业人员能力的等级证书。旨在构建多层次从业人员培养培训体系,建立健全人才职业能力评价和激励机制的要求,培养我国项目管理领域复合型人才。  【证书含金量】 ·竞聘优先......
  • tfs 迁入解决方案缺少项目文件[*.csproj]
    .csproj、.vssscc没办法签入TFS怎么办?试图将VisualStudio文件上传到TeamFoundationServer中,但是签入了解决方案文件,项目文件一个都没签入,没办法,就右键,手工将文件添加到源代码管理器。但是.csproj、.vssscc并没有在VisualStudio的解决方案资源管理器中出现,怎么将......
  • CSP模拟23
    电压、农民、奇迹树、暴雨来自\(\texttt{happyguy}\)的馈赠。A.电压我们考虑选一条边作为那条两边结点相同的边。首先考虑,如果不选奇环上的边。奇环上的边一定有两端结点颜色相同的,所以如果图中有奇环,奇环上的边一定被选择。考虑偶环,偶环上的边一定不能被选,选了的话偶环......