新生40

题目描述

Snuke and Raccoon have a heap of N cards. The i-th card from the top has the integer ai written on it.
They will share these cards. First, Snuke will take some number of cards from the top of the heap, then Raccoon will take all the remaining cards. Here, both Snuke and Raccoon have to take at least one card.
Let the sum of the integers on Snuke's cards and Raccoon's cards be x and y, respectively. They would like to minimize |x−y|. Find the minimum possible value of |x−y|.

Constraints

2≤N≤2×105
−109≤ai≤109
ai is an integer.

输入

Input is given from Standard Input in the following format:
N
a1 a2 … aN

输出

Print the answer.

样例输入 Copy

6
1 2 3 4 5 6

样例输出 Copy

1

提示

If Snuke takes four cards from the top, and Raccoon takes the remaining two cards, x=10, y=11, and thus |x−y|=1. This is the minimum possible value.
前缀和
看题的数据范围啊,a[i]存在负数的情况,所以不能加两次绝对值,我加了两次绝对值负数的情况就不对了,然后minn取无穷大,为什么手动打999999不对,尴尬的
复制代码
#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3,"Ofast","inline")
#include<iostream>
#include<algorithm>
#include<cmath>
#define MAX 0x7f7f7f7f
using namespace std;
typedef long long LL;
const int N=200000+10;
LL a[N],s[N];
int main(){
    int n;
    LL sum=0;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%lld",&a[i]);
        sum=sum+a[i];
        s[i]=s[i-1]+a[i];
    }
    LL minn=MAX; 
    for(int i=1;i<n;i++)
        minn=min(minn,abs(sum-s[i]-s[i]));
    printf("%lld",minn);
    return 0;
    
}
复制代码

 多项式输出:

题目描述

一元 n 次多项式可用如下的表达式表示:
其中,aixi称为 i 次项,ai 称为 i 次项的系数。给出一个一元多项式各项的次数和系数,请按照如下规定的格式要求输出该多项式:
f(x)=anxn+an-1xn-1+...+a1x+a0,an≠0
1. 多项式中自变量为 x,从左到右按照次数递减顺序给出多项式。
2. 多项式中只包含系数不为 0 的项。
3. 如果多项式 n 次项系数为正,则多项式开头不出现“+”号,如果多项式 n 次项系数为负,则多项式以“-”号开头。
4. 对于不是最高次的项,以“+”号或者“-”号连接此项与前一项,分别表示此项系数为正或者系数为负。紧跟一个正整数,表示此项系数的绝对值(如果一个高于 0 次的项,其系数的绝对值为 1,则无需输出 1)。如果 x 的指数大于 1,则接下来紧跟的指数部分的形式为“x^b”,其中 b 为 x 的指数;如果 x 的指数为 1,则接下来紧跟的指数部分形式为“x”;
如果 x 的指数为 0,则仅需输出系数即可。
5. 多项式中,多项式的开头、结尾不含多余的空格。

输入

输入共有 2 行
第一行 1 个整数,n,表示一元多项式的次数。
第二行有 n+1 个整数,其中第 i 个整数表示第 n-i+1 次项的系数,每两个整数之间用空格隔开。(0<=n<=100,-100<=系数<=100)

输出

输出共 1 行,按题目所述格式输出多项式。

样例输入 Copy

5 
100 -1 1 -3 0 10

样例输出 Copy

100x^5-x^4+x^3-3x^2+10
这题真心没意思,但模拟的时候真的需要决策一下,考虑一下策略,我在训练的时候写了150+的行数,最后还没ac,尴尬了,当时我选择的是一个个判断,反正又浪费时间又废脑筋
其实不需要,找规律??一发手全部输出就好,比如如果是正数就加一个加号,第一个除外。否则负数就直接输出,再输出后面的x^的这些都东西,同理。然后系数是0的情况我考虑复杂了
还在那判断。。。直接部署春不就行了么...
复制代码
#include<iostream>
using namespace std;
int main(){
    int n,t;
    cin>>n;
    for(int i=n;i>=0;i--)
    {
        cin>>t;
        if(t)//把系数是0的忽略了 
        {
            if(i!=n&&t>0) printf("+");
            if(abs(t)>1||i==0) printf("%d",t);
            if(t==-1&&i) printf("-");
            if(i>1) printf("x^%d",i);
            if(i==1) printf("x"); 
        }
    }
    return 0;
}
复制代码

 

 
posted @   小志61314  阅读(34)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示