中秋练习题

高高兴兴过中秋,快快乐乐写作业

总结:

T1 恶心的枚举

T2 字符串处理

T3 回溯

1、P1023 税收与补贴问题

题目背景

每样商品的价格越低,其销量就会相应增大。现已知某种商品的成本及其在若干价位上的销量(产品不会低于成本销售),并假设相邻价位间销量的变化是线性的且在价格高于给定的最高价位后,销量以某固定数值递减。(我们假设价格及销售量都是整数)

对于某些特殊商品,不可能完全由市场去调节其价格。这时候就需要政府以税收或补贴的方式来控制。(所谓税收或补贴就是对于每个产品收取或给予生产厂家固定金额的货币)

题目描述

你是某家咨询公司的项目经理,现在你已经知道政府对某种商品的预期价格,以及在各种价位上的销售情况。要求你确定政府对此商品是应收税还是补贴的最少金额(也为整数),才能使商家在这样一种政府预期的价格上,获取相对其他价位上的最大总利润。

总利润=单位商品利润*销量

单位商品利润=单位商品价格 - 单位商品成本 (- 税金 or + 补贴)

输入输出格式

输入格式:

输入的第一行为政府对某种商品的预期价,第二行有两个整数,第一个整数为商品成本,第二个整数为以成本价销售时的销售量,以下若干行每行都有两个整数,第一个为某价位时的单价,第二个为此时的销量,以一行-1,-1表示所有已知价位及对应的销量输入完毕,输入的最后一行为一个单独的整数表示在已知的最高单价外每升高一块钱将减少的销量。

输出格式:

输出有两种情况:若在政府预期价上能得到最大总利润,则输出一个单独的整数,数的正负表示是补贴还是收税,数的大小表示补贴或收税的金额最小值。若有多解,取绝对值最小的输出。

如在政府预期价上不能得到最大总利润,则输出“NO SOLUTION”。

输入输出样例

输入样例#1:

31

28 130

30 120

31 110

-1  -1

15

输出样例#1:

4

AC代码:

#include<iostream>
#define ABS(x) (x<0?-x:x)
using namespace std;
int a[10][2],n,ans=0x3f3f3f3f;
inline int clac(int xl,int price,int k){
    return (price-(**a)+k)*xl;
}
int main(){
    ios::sync_with_stdio(false);
    int i,j,k,pp,dc,t,maxs,maxd;
    cin>>pp;
    while(cin>>a[n][0]>>a[n][1],a[n][0]+1||a[n][1]+1) n++;
    cin>>dc;
    for(maxs=maxd=0,k=-32;k<=9;k++){
        for(i=0;i<n-1;i++){
            for(j=*a[i];j<*a[i+1];j++){
                if((t=clac(a[i][1]+(a[i+1][1]-a[i][1])/(*a[i+1]-*a[i])*(j-*a[i]),j,k))>=maxs)
                    maxs=t,maxd=j;
            }
        }
        for(i=a[n-1][1];i>0;j++,i-=dc) if((t=clac(i,j,k))>=maxs) maxs=t,maxd=j;
        if(maxd==pp&&ABS(k)<ABS(ans))ans=k;
    }
    if(ans<0x3f3f3f3f) cout<<ans;
    else cout<<"NO SOLUTION";
    return 0;
}


2、P1098 字符串的展开

题目描述

在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或者“4-8”的字串,我们就把它当作一种简写,输出时,用连续递增的字母获数字串替代其中的减号,即,将上面两个子串分别输出为“defgh”和“45678”。在本题中,我们通过增加一些参数的设置,使字符串的展开更为灵活。具体约定如下:

(1) 遇到下面的情况需要做字符串的展开:在输入的字符串中,出现了减号“-”,减号两侧同为小写字母或同为数字,且按照ASCII码的顺序,减号右边的字符严格大于左边的字符。

(2) 参数p1:展开方式。p1=1时,对于字母子串,填充小写字母;p1=2时,对于字母子串,填充大写字母。这两种情况下数字子串的填充方式相同。p1=3时,不论是字母子串还是数字字串,都用与要填充的字母个数相同的星号“*”来填充。

(3) 参数p2:填充字符的重复个数。p2=k表示同一个字符要连续填充k个。例如,当p2=3时,子串“d-h”应扩展为“deeefffgggh”。减号两边的字符不变。

(4) 参数p3:是否改为逆序:p3=1表示维持原来顺序,p3=2表示采用逆序输出,注意这时候仍然不包括减号两端的字符。例如当p1=1、p2=2、p3=2时,子串“d-h”应扩展为“dggffeeh”。

(5) 如果减号右边的字符恰好是左边字符的后继,只删除中间的减号,例如:“d-e”应输出为“de”,“3-4”应输出为“34”。如果减号右边的字符按照ASCII码的顺序小于或等于左边字符,输出时,要保留中间的减号,例如:“d-d”应输出为“d-d”,“3-1”应输出为“3-1”。

输入输出格式

输入格式:

输入文件expand.in包括两行:

第1行为用空格隔开的3个正整数,一次表示参数p1,p2,p3。

第2行为一行字符串,仅由数字、小写字母和减号“-”组成。行首和行末均无空格。

输出格式:

输出文件expand.out只有一行,为展开后的字符串。

输入输出样例

输入样例#1:

【输入样例1】

1 2 1

abcs-w1234-9s-4zz

【输入样例2】

2 3 2

a-d-d

输出样例#1:

【输出样例1】

abcsttuuvvw1234556677889s-4zz

【输出样例2】

aCCCBBBd-d

说明

40%的数据满足:字符串长度不超过5

100%的数据满足:1<=p1<=3,1<=p2<=8,1<=p3<=2。字符串长度不超过100

NOIP 2007 提高第二题

AC代码:

#include<iostream>
#include<string>
#include<cctype>
using namespace std;
int main(){
    //ios::sync_with_stdio(false);一句话RE两个点,慎用
    string a;
    int x,y,z;
    cin>>x>>y>>z>>a;
    for(int i=1;i<a.length()-1;i++){
        if(a[i]==‘-‘&&a[i-1]<a[i+1]&&a[i+1]-a[i-1]<=26&&a[i+1]!=‘-‘&&a[i-1]!=‘-‘){
            string tf="";
            int start=z==1?a[i-1]+1:a[i+1]-1,end=z==1?a[i+1]-1:a[i-1]+1;
            for(int j=start;z==1?j<=end:j>=end;z==1?j++:j--){
                for(int k=1;k<=y;k++){
                    tf+=x==1?tolower(j):x==2?toupper(j):‘*‘;
                }
            }
            a.replace(i,1,tf);
        }
    }
    cout<<a;
    return 0;
}


3、P1294 高手去散步

题目背景

高手最近谈恋爱了。不过是单相思。“即使是单相思,也是完整的爱情”,高手从未放弃对它的追求。今天,这个阳光明媚的早晨,太阳从西边缓缓升起。于是它找到高手,希望在晨读开始之前和高手一起在鳌头山上一起散步。高手当然不会放弃这次梦寐以求的机会,他已经准备好了一切。

题目描述

鳌头山上有n个观景点,观景点两两之间有游步道共m条。高手的那个它,不喜欢太刺激的过程,因此那些没有路的观景点高手是不会选择去的。另外,她也不喜欢去同一个观景点一次以上。而高手想让他们在一起的路程最长(观景时它不会理高手),已知高手的穿梭机可以让他们在任意一个观景点出发,也在任意一个观景点结束。

输入输出格式

输入格式:

第一行,两个用空格隔开的整数n、m. 之后m行,为每条游步道的信息:两端观景点编号、长度。

输出格式:

一个整数,表示他们最长相伴的路程。

输入输出样例

输入样例#1:

4 6

1 2 10

2 3 20

3 4 30

4 1 40

1 3 50

2 4 60

输出样例#1:

150

说明

对于100%的数据:n≤20,m≤50,保证观景点两两之间不会有多条游步道连接.

AC代码:

#include<cstdio>
#include<algorithm>
using namespace std;
#define N 21
int n,m,d[N][N],maxn=-1;
bool c[N][N],vis[N]={1};
int dfs(int x,int dis){
    for(int i=1;i<=n;i++){
        if(!vis[i]&&c[x][i]){
            vis[i]=1;
            c[x][i]=c[i][x]=0;
            dis+=d[x][i];
            maxn=max(dis,maxn);
            dfs(i,dis);
            vis[i]=0;
            c[x][i]=c[i][x]=1;
            dis-=d[x][i];
        }
    }
}
int main(){
    scanf("%d%d",&n,&m);
    for(int i=1,u,v,w;i<=m;i++){
        scanf("%d%d%d",&u,&v,&w);
        c[u][v]=c[v][u]=1;
        d[u][v]=d[v][u]=w;
    }
    for(int i=1;i<=n;i++) c[0][i]=1;
    dfs(0,0);
    printf("%d",maxn);
    return 0;
}
时间: 2024-12-29 07:33:10

中秋练习题的相关文章

[Lab4-1]抓路由练习题

[Lab4-1]抓路由练习题 问题1: 用ACL抓取172.18.0.0/16----172.29.0.0/16的路由 答案: 172.16.0.0 0.15.255.255,看上去很完美,但实际上框的范围有些大. R1(f0/0)-(f0/0)R2 R1上的接口地址: R1#sh ip int b Interface IP-Address OK? Method Status Protocol FastEthernet0/0 12.1.1.1 YES NVRAM up up Loopback0

VBS练习题

练习题: 1.输入3个数,输出其中最大的那个值. Option Explicit Dim intA,intB,intC intA=CInt(InputBox("请输入a:")) intB=CInt(InputBox("请输入b:")) intC=CInt(InputBox("请输入c:")) If intA>intB And intA>intC Then MsgBox "最大值是:"&intA ElseIf

hdu 1166:敌兵布阵(树状数组,练习题)

敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 37773    Accepted Submission(s): 15923 Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就

1007 数字逻辑练习题

1007: 数字逻辑练习题 时间限制: 1 Sec  内存限制: 128 MB提交: 264  解决: 59[提交][状态][讨论版] 题目描述 原码.反码.补码都是一样的,都是正数本身.  对于负数: 原码是符号位为 1,数值部分取绝对值的二进制. 反码是符号位为 1,其它位是原码取反. 补码是符号位为 1,其它位是原码取反,未位加 1.  输入一个 64bit 十进制整数,输出它的原码,反码,补码的 16 进制表示法 输入 有多组数据,每组数据一行,为一个 64bit 十进制整数,包含正负符

算法--三色排序练习题

三色排序练习题 第17节 三色排序练习题 有一个只由0,1,2三种元素构成的整数数组,请使用交换.原地排序而不是使用计数进行排序. 给定一个只含0,1,2的整数数组A及它的大小,请返回排序后的数组.保证数组大小小于等于500. 测试样例: [0,1,1,0,2,2],6 返回:[0,0,1,1,2,2] Java (javac 1.7) 代码自动补全 1 import java.util.*; 2 3 public class ThreeColor { 4 public int[] sortTh

十(1,5),十一单元练习题

<<<第十单元练习题>>>1.配置desktop主机和server主机的日志服务要求如下:*)desktop主机中的日志全部定向到/var/log/westos文件中*)时时同步desktop主机中的所有日志到server中 5.配置系统中的systemd-journal程序,使journal命令可以查看到关机前的日志 1. desktop主机: vim /etc/rsyslog.conf 重启rsyslog服务 ----------------------------

第十单元练习题

<<<第十单元练习题>>> 1.配置desktop主机和server主机的日志服务要求如下: *)desktop主机中的日志全部定向到/var/log/westos文件中 打开vim /etc/rsystem.conf 在55行 写入*.*     /var/log/westos *)时时同步desktop主机中的所有日志到server中 关闭desktop server中的防火墙 发送端: 接收端: 发送端打入:logger test messages 接收方打入:t

Python练习题 024:求位数及逆序打印

[Python练习题 024] 给一个不多于5位的正整数,要求:一.求它是几位数,二.逆序打印出各位数字. ---------------------------------------------- 这题如果不用递归,实在太简单了!!!代码上: str = input('请输入一个不多于5位的正整数:') print('这个数字是%s位数,逆序为%s.' % (len(str), str[::-1])) 输出结果如下: 请输入一个不多于5位的正整数:45931这个数字是5位数,逆序为13954

第一单元练习题

<<<第一单元练习题>>> 1.用student用户登陆系统图形界面 2.打开一个bash 3.修改student的密码,把密码更新成"T3st1ngtlme"(主机字母和数字) psaawad student 4.显示当前系统时间 date 5.显示当前系统时间,显示格式为:"小时:分钟:秒 AM/PM"(AM/PM为上下午标识) date +%X%p 6.显示"/usr/bin/clean-binary-files&