HH_Knight 2020-04-03 10:33 采纳率: 50%
浏览 297

求助,今天就要截至的作业,求大佬解答。

一:
如果通过插入“ +”和“ 1”可以从中得到格式正确的数学表达式,则将带括号的序列称为正确的。

例如,序列 "(())()","()"和 "(()(()))"是正确的,而")(","(()))("和"(()" 不是。

定义重新排序操作:选择括号序列的任意连续子段(子字符串),然后以任意方式对其中的所有字符进行重新排序。

当重新排序的子段的长度为t时,重新排序操作需要耗时t秒。

例如,对于“))((”,他可以选择子字符串“)(”并重新排序“)()(”(此操作将花费2秒)。

不难看出,重新排序操作不会改变左括号和右括号的数量。

现在,LD想花费最少的时间,通过任意次数(可能为零)执行重新排序操作来使括号序列变成正确的。

输入格式:
第一行包含一个整数n(1≤n≤1e6),表示序列的长度;

第二行包含一个长度为n的字符串,仅由字符‘(’和‘)’组成。

输出格式:
输出一个整数,表示使括号序列正确的最小秒数;如果不可能实现,则输出-1。

输入样例:
8
))((())(

输出样例:
6

二:
有N堆石子,每堆石子有若干石头,所有石头的总数是N的倍数。

可以在任意一堆上取若干石头,进行移动。移动规则是:在第一堆上取的石子,只能移到第二堆;在第N堆上取的石子,只能移到N-1堆;其他堆上取的,可以移到相邻左边或者右边。如何用最少的移动次数使得每堆石子的数量一样多呢?

当N=4时,4堆石子数为:9、8、17、6

移动3次可以使4堆数目一样多:

从第3堆取4个石子放到第4堆(9、8、13、10)

从第3堆取3个放到第2堆(9、11、10、10)

从第2堆取1个放到第1堆(10、10、10、10)

输入格式:
第一行包含一个整数N(1<= N <=100),表示有N堆石子;

接着有N行,每行一个整数ai(1<= ai <=10000),表示第i堆石子的数量。

输出格式:
输出一个整数,表示使所有石子堆的石子均达到相等时需要的最少移动次数。

输入样例:
4
9 8 17 6

输出样例:
3

  • 写回答

1条回答 默认 最新

  • 柯本 2020-04-03 11:12
    关注

    #include
    using namespace std;
    int main()
    {
    int n,i,sum,av,a[101],ct,x[101]= {0};
    cin>>n;
    sum=0;
    for(i=0; i {
    cin>>a[i];
    sum+=a[i];
    }
    av=sum/n;
    ct=0;
    for(i=1; i<n; i++)
    {
    x[i]=x[i-1]-a[i-1]+av;
    cout << x[i] << " ";
    }
    cout << endl;
    for(i=0; i<n; i++)
    if(x[i])
    ct++;
    cout<<ct<<endl;
    return 0;
    }

    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)