寒假6 cpp

A

数据范围

打表

#include<bits/stdc++.h>
#define int long long
using namespace std;

signed main(){

    int t=1;
    //cin>>t;
    int a[]={2 ,3 ,5, 7, 11 ,13 };
    set<int>st;
    for(int i=0;i<6;i++)
    {
        for(int j=i+1;j<6;j++)
        {
            for(int k=j+1;k<6;k++)
            {
                st.insert(a[i]*a[j]*a[k]);
            }
        }
    }
    while(t--)
    {
        int l,r;
        int flag=1;
        cin>>l>>r;
        for(int i=l;i<=r;i++)
        {
            if(st.find(i)!=st.end())
            {
                cout<<i<<endl;
                flag=0;
                break;
            }
        }
        if(flag)cout<<-1<<endl;
    }
}

B

二分查找最小 更新 idx和location的值 然后swap (有人没更新minn wa了...)

#include<bits/stdc++.h>
#define int long long
using namespace std;

signed main(){

    int t=1;
    //cin>>t;

    while(t--)
    {
        int n;
        cin>>n;
        vector<int>a(n),b(n);
        for(int i=0;i<n;i++)cin>>a[i];
        for(int i=0;i<n;i++)cin>>b[i];
        std::sort(a.begin(), a.end());
        int minn=INT_MAX;
        int location,idx;
        for(int i=0;i<n;i++)
        {
            int p= std::lower_bound(a.begin(), a.end(),b[i])-a.begin();
            if(abs(a[p-1]-b[i])<abs(a[p]-b[i]))p--;
            if(abs(a[p]-b[i])<minn)
            {
                location=p;
                idx=i;
                minn=abs(a[p]-b[i]);
            }
            if(minn==0)break;
        }
        swap(a[location],a[idx]);
        for(int i=0;i<n;i++)cout<<a[i]<<' ';
        cout<<endl;
    }
}

C

看数据范围

打表造数据....

当然把斐波那契存一下也行,慢不了多少

用map来存n和idx idx对应一个结构体数组来存相应的斐波那契元素

#include<bits/stdc++.h>
#define int long long
using namespace std;
int fibnacial[]={0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368,75025,121393,196418,317811,
                 514229,832040,1346269,2178309,3524578,5702887,9227465,14930352,24157817,39088169,63245986,102334155,165580141,267914296,
                 433494437,701408733};
struct node
{
  int i;
  int j;
  int k;
};
signed main(){

    int q;
    cin>>q;
    map<int,int>mp;
    int cnt=0;
    vector<node>p(45*45*45);
    for(int i=0;i<45;i++)
    {
        for(int j=0;j<45;j++)
        {
            for(int k=0;k<45;k++)
            {
              mp[fibnacial[i]+fibnacial[j]+fibnacial[k]]=cnt;
              p[cnt].i=fibnacial[i];
              p[cnt].j=fibnacial[j];
              p[cnt].k=fibnacial[k];
              cnt++;
            }
        }
    }
    while(q--)
    {
        int n;
        cin>>n;
        if(mp.find(n)!=mp.end())cout<<p[mp[n]].i<<' '<<p[mp[n]].j<<' '<<p[mp[n]].k<<endl;
        else cout<<-1<<endl;
    }
}

D

模拟概率

#include<bits/stdc++.h>
#define int long long
using namespace std;

signed main(){

    int t=1;
    //cin>>t;

    while(t--)
    {
        double p;
        cin>>p;
        cout<<p*p*(1-p)*(1-p)*(1-p)+p*p*p*(1-p)*(1-p)<<endl;
    }
}

E

难绷了

这个BOx x(max)=1e5没看到 以为是个位数......喜提wa1发

模拟题

#include<bits/stdc++.h>
#define int long long
using namespace std;

signed main(){

    int t=1;
    //cin>>t;
    
    while(t--)
    {
        vector<char>p(2);
        cin>>p[0]>>p[1];
        
        int op;
        cin>>op;
        string s;
        cin>>s;
        int wincount=op/2+1;
        int m=op;
        int cntr=0,cntp=0;
        int flag=0;
        for(int i=0;i<s.size();i++)
        {
            if(s[i]=='R')cntr++;
            else cntp++;
            if(cntr==wincount)
            {
                cout<<"kou!"<<endl<<i+1<<endl;
                flag=1;
                break;
            }
            if(cntp==wincount){
                cout<<"yukari!"<<endl<<i+1<<endl;
                flag=1;
                break;
            }

        }
        if(!flag)cout<<"to be continued."<<endl<<s.size()<<endl;
    }

}

I

推公式发现任意一个子矩阵的和都是一段ai的和乘以一段bi的和

转化为寻找sumsub(ai)*sumsub(bi)的最大值

难绷的是有负数 我把最小的也找了() 直接输出几个中的最大的就过了....

#include<bits/stdc++.h>
#define int long long
using namespace std;

int maxsum(vector<int>& a) {
    int n = a.size();
    int ans=a[0],sum=0;
	for (int i=0; i<n; i++){
		sum=max(sum+a[i],a[i]);
		ans=max(ans,sum);
	}
    return ans;
}

int minsum(vector<int>& a) {
    int n = a.size();
    int ans=a[0],sum=0;
	for (int i=0; i<n; i++){
		sum=min(sum+a[i],a[i]);
		ans=min(ans,sum);
	}
    return ans;
}

signed main(){

        int n, m;
        cin >> n >> m;
        vector<int>a(n),b(m);
        for (int i = 0; i < n; i++) {
            cin >> a[i];
        }

        for (int i = 0; i < m; i++) {
            cin >> b[i];
        }
        int p1=maxsum(a);
        int p2=minsum(a);
        int q1=maxsum(b);
        int q2=minsum(b);
        cout<<max({q1*p1,q1*p2,q2*p1,q2*p2})<<endl;
}

J

DFS

将未涂色的节点和该红节点构造和为3的倍数即可

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+10;
int n, f[N], a[N];
string s;
vector<vector<int>> e(N), E(N);
vector<int> R;

void dfs(int u = 1, int fa = 0)
{
    if (s[u] == 'W') f[u] = f[fa];
    for (auto v : e[u])
    {
        if (v != fa) dfs(v, u);
    }
}

void solve()
{
    cin >> n >> s;
    s = " " + s;
    for (int i = 2; i <= n; i ++)
    {
        int x; cin >> x;
        e[x].emplace_back(i);
    }
    for (int i = 1; i <= n; i ++) f[i] = i, a[i] = 1;
    dfs();
    for (int i = 1; i <= n; i ++) {
        if (f[i] == i) R.emplace_back(i);
        E[f[i]].emplace_back(i);
    }
    for (auto u : R) {
        if (E[u].size() == 1) {
            cout << -1 << endl;
            return;
        }
        if (E[u].size() & 1) {
            for (int i = 0; i < 3; i ++) a[E[u][i]] = 1;
            for (int i = 3; i < E[u].size(); i ++) a[E[u][i]] = (i & 1) + 1;
        } else {
            for (int i = 0; i < E[u].size(); i ++) a[E[u][i]] = (i & 1) + 1;
        }
    }
    for (int i = 1; i <= n; i ++) cout << a[i];
    cout << endl;
}


signed main() {
   int t=1;
   //cin>>t;
   while(t--)
   {
       solve();
   }
    return 0;
}
posted @   cyyyyyyyyyyyyy  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示