首页 > 其他分享 >CSP-J2022题解

CSP-J2022题解

时间:2022-11-13 13:33:23浏览次数:77  
标签:return val int 题解 long J2022 4n ls CSP

CSP-J2022题解

T1 乘方

思路

非常简单,直接for循环上就行了。为什么不会炸呢?因为就算a=1e9,乘两次也炸不了long long

代码

#include<cstdio>
long long a,n,ans=1;
int main(){
	scanf("%lld%lld",&a,&n);
	for(int i=1;i<=n;i++){
		ans*=a;
		if(ans>1000000000){
			puts("-1");
			return 0;
		}
	}
	printf("%lld\n",ans);
	return 0;
}

T2 解密

思路

比较困难(我不会解一元二次方程),需要推一下式子。

\[ed=(p-1)(q-1)+1 \]

\[ed=pq-p-q+2 \]

\[p+q=pq-ed+2 \]

\[p+q=n-ed+2 \]

设\(m\)为\(n-ed+2\):

\[n=pq \]

\[m=p+q \]

解方程即可:

\[(p+q)^2=p^2+q^2+2n \]

\[(p-q)^2=p^2+q^2-2n \]

\[(p+q)^2-(p-q)^2=4n \]

\[m^2-(p-q)^2=4n \]

\[(p-q)^2=m^2-4n \]

\[p-q=\sqrt {m^2-4n} \]

\[p-q+m=p-q+p+q=2p=\sqrt {m^2-4n}+m \]

\[p=\frac {\sqrt {m^2-4n}+m}{2} \]

\[q=m-\frac {\sqrt {m^2-4n}+m}{2} \]

带式子算就可以了。

代码

#include<cstdio>
#include<cmath>
void solve(){
	long long n,e,d,m,p,q;
	scanf("%lld%lld%lld",&n,&e,&d);
	m=n-e*d+2,p=sqrt(m*m-4*n);
	if(p*p==m*m-4*n){
		p=(p+m)/2,q=m-p;
		if(p>q)p^=q^=p^=q;
		printf("%lld %lld\n",p,q);
	}else puts("NO");
}
int main(){
	int q;
	scanf("%d",&q);
	while(q--)solve();
	return 0;
}

T3 逻辑表达式

思路

思路较简单,代码较难写。

先通过题目给出的表达式构建出表达式树,然后通过dfs的方式找出短路现象。

遍历到的节点,先遍历左子树,然后再根据题意判断是否为短路,如果否再遍历右子树,如果是就返回。

代码

#include<bits/stdc++.h>
using namespace std;
char s[1000005],h[1000005];
char stk[1000005];
int stk2[1000005];
int top,len,cnt,root,ans1,ans2;
struct node{int data,ls,rs,fa,val;};
node t[1000005];
void dfs(int x){
	if(x==0)return;
	if(t[x].ls==0&&t[x].rs==0){
		t[x].val=t[x].data;
		return;
	}
	dfs(t[x].ls);
	if(t[x].data==2&&t[t[x].ls].val==0){
		ans1++;
		t[x].val=0;
		return;
	}
 	if(t[x].data==3&&t[t[x].ls].val==1){
		ans2++;
		t[x].val=1;
		return;
	}
	dfs(t[x].rs);
	if(t[x].data==2)t[x].val=t[t[x].ls].val&t[t[x].rs].val;
	if(t[x].data==3)t[x].val=t[t[x].ls].val|t[t[x].rs].val;
}
int main(){
	scanf("%s",s+1);
	len=strlen(s+1);
	for(int i=1;i<=len;i++){
		if(s[i]=='(')stk[++top]='(';
		else if(s[i]=='|'){
			while(stk[top]=='&'||stk[top]=='|')h[++cnt]=stk[top--];
			stk[++top]='|';
		}
		else if(s[i]=='&'){
			while(stk[top]=='&')h[++cnt]=stk[top--];
			stk[++top]='&';
		}
		else if(s[i]==')'){
			while(stk[top]!='(')h[++cnt]=stk[top--];
			top--;
		}else h[++cnt]=s[i];
	}
	while(top)h[++cnt]=stk[top--];
	for(int i=1;i<=cnt;i++){
		if(h[i]=='&')t[i].data=2;
		else if(h[i]=='|')t[i].data=3;
		else t[i].data=h[i]-'0';
	}
	for(int i=1;i<=cnt;i++){
		if(h[i]=='&'||h[i]=='|'){
			t[i].rs=stk2[top];
			t[i].ls=stk2[top-1];
			t[stk2[top]].fa=i;
			t[stk2[top-1]].fa=i;
			top-=2;
		}
		stk2[++top]=i;
	}
	root=stk2[top--];
	dfs(root);
	printf("%d\n%d %d\n",t[root].val,ans1,ans2);
	return 0;
}

T4 上升点列

还没写

标签:return,val,int,题解,long,J2022,4n,ls,CSP
From: https://www.cnblogs.com/maniubi/p/16885848.html

相关文章

  • 2022/11/12 模拟测题解
    2022/11/12模拟测题解A考场上推了一下,发现这个玩意挺有意思。一共有\((n+1)(m+1)\)个字符串,减去相同的个数,即可。这个相同的个数还是很好统计的,且这里指的相同仅仅是......
  • CSP-J CSP-S NOIP容易犯错误汇总(一)
    NOIP2013调试技巧​​https://www.cnblogs.com/forever97/p/3456504.html​​2017NOIP考后总结​​https://blog.csdn.net/Broaden_my_horizon/article/details/78613821​......
  • ACM-ICPC World Finals 2022 L Where Am I? 题解
    题目链接我们要干的事情其实是对于输入矩阵中的每个位置,求出从它开始至少走几步形成的序列能跟所有位置走同样步数形成的序列不同。注意到每个位置至少走\(200^2\)步就能......
  • ACM-ICPC World Finals 2022 L Where Am I? 题解
    题目链接我们要干的事情其实是对于输入矩阵中的每个位置,求出从它开始至少走几步形成的序列能跟所有位置走同样步数形成的序列不同。注意到每个位置至少走\(200^2\)步就能......
  • 题解 AGC036D【Negative Cycle】
    problem(fromluogu)有一个\(N\)个点的有向图,节点标号为\(0\sim(N-1)\)。这张图初始时只有\(N-1\)条边,每条边从\(i\)指向\(i+1\),边权为\(0\)。对于每一......
  • 题解 CF1051F【The Shortest Statement】
    problem连通图,无自环,无重边,\(m-n\leq20\),\(n\leq10^5\),\(10^5\)询问两点之间最短路。solution搞出任意一棵生成树。一共\(21\)条非树边。对于任意一条路径,它只有......
  • CSP 202203-1 未初始化警告 C++
    1#include<iostream>2#include<vector>3intmain(){4intx{},y{};5std::cin>>x>>y;//读入第一行6std::vector<std::vector<int>>k......
  • ABC277E 题解
    前言题目传送门!更好的阅读体验?非常套路的分层图,纪念赛时切掉了。思路我们以样例来解释。首先,这是最基础的图。我们把图分成两层:第一层是原本\(w=1\)的路可以通......
  • ABC277D 题解
    前言题目传送门!或许更好的阅读体验?比较简单的模拟。思路首先把\(a_i\)排序。每次往后一直跑,如果不能再取了,就停下。但是这样做是\(O(n^2)\)的。我们需要优化。......
  • EasyExcel低版本中数据行中包含空数据会跳过导致数据对应不上的问题解析
    文章摘自:https://blog.csdn.net/caijwjava/article/details/100855361实战1、导入一个相关依赖即可<dependency><groupId>com.alibaba</groupId><artifactId>easyexc......