1 条题解

  • 0
    @ 2025-8-24 22:12:54

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Crab_Dave
    老博客了,鸽子在东西

    搬运于2025-08-24 22:12:54,当前版本为作者最后更新于2019-11-11 17:44:14,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    emmm...

    事实证明考试时不会可以借助SPJ和随机序列乱搞

    在时限范围内随机一个序列,判断是否符合题意,然后输出即可~

    详见代码qwq

    #include<bits/stdc++.h>
    using namespace std;//头文件
    
    #define MAX_TIME 0.8//时限,超过0.8s比较危险,就不随机了qwq
    int n,m;
    double a[4005],ans[35];//你懂得
    bool b[4005];
    
    void Produce()//随机产生一个序列
    {
    	for(register int i=1;i<=n;i++)
    	{
    		ans[i]=(rand()%20000-10000)/100;//序列范围[-100.0,100.0]
    	}
    }
    
    bool check()//判断序列合法
    {
    	int wrongnum=0;//因为说了错误组数小于等于5组就可以得全分,所以偷个懒qwq
    	double sum;
    	for(register int i=1;i<=m;i++)
    	{
    		sum=0;
    		for(register int j=1;j<=n;j++)//对于每一个条件进行求和
    		{
    			sum+=pow(a[i],j-1)*ans[j];//因为是double型的,就偷懒用个cmath的pow
    		}
    		if(sum>0&&!b[i])wrongnum++;//不满足wrongnum++
    		else if(sum<=0&&b[i])wrongnum++;//不满足wrongnum++
    		if(wrongnum>5)return 0;//错误组数大于5组则序列不合法
    	}
    	return 1;//序列合法
    }
    
    int main()
    {
    	srand(time(0));
    	scanf("%d%d",&n,&m);
    	for(register int i=1;i<=m;i++)
    	{
    		scanf("%lf%d",&a[i],&b[i]);//读入
    	}
    	do
    	{
    		Produce();//产生序列
    	}while(!check()&&(double)clock()/CLOCKS_PER_SEC<MAX_TIME);//序列合法或超出时限就退出
    	for(register int i=1;i<=n;i++)
    	{
    		printf("%.5lf ",ans[i]);//输出
    	}
    	return 0;//结束了罪恶的一生qwq
    }
    

    资瓷一下叭qwq

    • 1

    信息

    ID
    4604
    时间
    1000ms
    内存
    125MiB
    难度
    5
    标签
    递交数
    0
    已通过
    0
    上传者