第一次打AtCoder:D
A. Sequence of Strings
纯签到题
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
::sync_with_stdio(false);
iosint n;
>>n;
cin[15];
string sfor(int i=1;i<=n;i++)
>>s[i];
cinfor(int i=n;i>=1;i--)
<<s[i]<<'\n';
coutreturn 0;
}
B. Multi Test Cases
纯签到题
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
::sync_with_stdio(false);
iosint T;
>>T;
cinwhile(T--)
{
int ans=0;
int a;
int n;
>>n;
cinfor(int i=1;i<=n;i++)
{
>>a;
cinif(a%2==1)
++;
ans}
<<ans<<'\n';
cout}
return 0;
}
C. Count Connected Components
简单图论题.
但我还不会图论,对我就成了杀题:(
还是有点dfs的概念的,现场造了个算法A了
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=105;
int M[N][N];
bool v[N][N];
bool vis[N];
int n,m;
int ans=0;
int find_node(int a)
{
for(int i=1;i<=n;i++)
{
if(M[a][i]==1&&!v[a][i])
return i;
}
return 0;
}
void dfs(int a)
{
if(find_node(a)==0)
return;
while(find_node(a)!=0)
{
[a]=true;
visint t=find_node(a);
[a][t]=v[t][a]=true;
vif(!vis[t])
{
--;
ans[t]=true;
vis}
(t);
dfs}
}
int main() {
::sync_with_stdio(false);
ios>>n>>m;
cin=n;
ans(M,0,sizeof(M));
memset(vis,false,sizeof(vis));
memset(v,false,sizeof(v));
memsetint u,v;
for(int i=1;i<=m;i++)
{
>>u>>v;
cin[u][v]=M[v][u]=1;
M}
for(int i=1;i<=n;i++)
(i);
dfs<<ans<<'\n';
coutreturn 0;
}
D. Happy New Year 2023
一开始先找的p
,TLE了,后来改了改也不知道都改了哪,交了一下竟然A了.
回顾一下有可能是因为一开始用二分手写的sqrt()
超时严重,也有可能是先找q
会好一点.
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
,q;
ll p(ll n)
ll find_p{
if(n%4==0)
{
return n/4;
}
else if(n%2==0)
{
return 2;
}
=n>>2;
ll tempfor(ll i=3;i<=temp;i+=2)
{
if(n%i==0)
{
if(n/i%i!=0)
{
return i;
}
else
{
return n/i/i;
}
}
}
return 1;
}
int main() {
::sync_with_stdio(false);
iosint T;
>>T;
cinwhile(T--)
{
;
ll n>>n;
cin=find_p(n);
q=sqrt(n/q+0.5);
p<<p<<' '<<q<<'\n';
cout}
return 0;
}