day7
2025-02-04 20:10:55
发布于:上海
1.闰年
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a;
cin>>a;
if(a%400==0||(a%4==0&&a%100!=0))
cout<<"YES";
else
cout<<"NO";
}
2.画矩形
#include<bits/stdc++.h>
using namespace std;
int n,m,s;
char a;
int main(){
cin>>n>>m>>a>>s;
for(int i = 1;i<=n;i++){
if(i == 1||i == n) for(int j = 1;j<=m;j++)cout<<a;
else if(s == 1) for(int j = 1;j<=m;j++)cout<<a;
else{
for(int j = 1;j<=m;j++){
if(j == 1||j ==m) cout<<a;
else cout<<' ';
}
}
cout<<endl;
}
return 0;
}
树上路径
#include<bits/stdc++.h>
using namespace std;
vector<int> g[200020],ans;
int vis[200020];
bool flag=false;
int n,u,v,s,e;
void dfs(int idx) {
if (idx==e){
flag=true;
ans.push_back(idx);
return;
}
vis[idx]=1;
for (int i=0;i<g[idx].size();i++){
if (vis[g[idx][i]]==0){
dfs(g[idx][i]);
if (flag){
ans.push_back(idx);
return;
}
}
}
}
int main(){
cin>>n>>s>>e;
for (int i=1;i<n;i++){
cin>>u>>v;
g[u].push_back(v);
g[v].push_back(u);
}
dfs(s);
for (int i=ans.size()-1;i>=0;i--){
cout<<ans[i]<<" ";
}
}
三个数的最大乘积
#include<bits/stdc++.h>
using namespace std;
long long n,m[211111],ans,b,a,s;
int main(){
cin>>n;
//全是正数 a[n]*a[n-1]*a[n-2]
//全是负数 a[n]*a[n-1]*a[n-2]
//有正数有负数 a[n]*a[n-1]*a[n-2],a[1]*a[2](a[n])
for(int i=1;i<=n;i++)cin>>m[i];
sort(m+1,m+n+1);
long long ans = max(m[n]*m[n-1]*m[n-2],m[1]*m[2]*m[n]);
cout<<ans;
return 0;
}
找出分区值
#include<bits/stdc++.h>
using namespace std;
int a[1000005],ans = 1e9;
int main()
{
int n;cin >> n;
for(int i = 1;i <= n;++i)
{
cin >> a[i];
}
sort(a+1,a+1+n);
for(int i = 1;i < n;i++)
{
ans = min(a[i+1]-a[i],ans);
}
cout << ans;
}
使括号有效的最少添加
#include<bits/stdc++.h>
using namespace std;
int main(){
string a;
cin>>a;
int l = 0, r = 0;
for(int i=0;i<a.size();i++){
if(a[i]=='(')l++;
else{
if(l>0)l--;
else r++;
}
}
cout<<l+r;
}
黑白平衡树
#include <bits/stdc++.h>
using namespace std;
vector<int> g[200010];
int a[200010];
int T,n,u,ans;
string s;
int dfs(int idx){
int sum = a[idx];
for(int son:g[idx])sum+=dfs(son);
if(sum==0)ans++;
return sum;
}
int main(){
cin>>T;
while (T--){
cin>>n;
for (int i=1;i<=n;i++)g[i].clear();
ans=0;
for (int i=2;i<=n;i++){
cin>>u;
g[u].push_back(i);
}
cin>>s;
for (int i=0;i<s.length();i++){
if (s[i]=='W')a[i+1]=1;
else a[i+1]=-1;
}
dfs(1);
cout<<ans<<endl;
}
}
求和
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
long long sum = 0,num = 0;
cin>>n;
int a[n+1];
for(int i = 1;i<=n;i++){
cin>>a[i];
sum+=a[i];
}
long long ans = 0;
for(int i=1;i<=n;i++){
sum-=a[i];
ans+=a[i]*sum;
}
cout<<ans;
return 0;
}
这里空空如也
有帮助,赞一个