毕业考试

(exam.cpp/c/pas)

(1s/256M)

问题描述

快毕业了,Barry希望能通过期末的N门考试来顺利毕业。如果他的N门考试平均分能够达到V分,则他能够成功毕业。现在已知每门的分数不能够超过R;他的第i门考试目前得分为Ai,如果想要在这门科目增加一分则需要多写Bi篇论文。Barry想知道,如果想要毕业的话,他最少需要写多少篇论文?

输入格式(exam.in)

第一行三个整数,N, R, V,分别代表考试科目数,每门考试的最高分,需要达到的平均分。

接下来的N行每行两个整数A, B,分别代表这门考试的目前得分与增加一分需要多写的论文数。

输出格式(exam.out)

一个整数,代表他要毕业最少需要写的论文数。

样例输入

5 5 4

3 1

3 2

5 2

4 7

2 5

样例输出

4

数据范围及约束

对于30%的数据,N<=5, R<=3;

对于100%的数据,N<=100,000, R<=1000,000,000, 1<=V<=R

保证答案不超过10^18.

#include<cstdio>
#include<algorithm>
using namespace std;
int n,r,v;
long long tot,tmp,ans;
struct node
{
int now,more;
bool operator < (node p) const
{
return more<p.more;
}
}e[];
void out(long long x)
{
if(x/) out(x/);
putchar(x%+'');
}
void read(int &x)
{
x=; int f=; char c=getchar();
while(c<''|| c>'') { if(c=='-') f=-; c=getchar(); }
while(c>='' && c<='') { x=x*+c-''; c=getchar(); }
x*=f;
}
int main()
{
freopen("exam.in","r",stdin);
freopen("exam.out","w",stdout);
read(n); read(r); read(v);
for(int i=;i<=n;i++) read(e[i].now),read(e[i].more),tmp+=e[i].now ;
sort(e+,e+n+);
tot=1ll*v*n;
int i=;
while(tmp!=tot)
{
if(r-e[i].now+tmp<=tot) tmp+=(r-e[i].now),ans+=1ll*(r-e[i].now)*e[i].more;
else ans+=1ll*(tot-tmp)*e[i].more,tmp=tot;
i++;
}
out(ans);
}

电梯

(lift.c/cpp/pas)

(1s/256M)

问题描述

无所事事的Cinzo决定用坐电梯的方式来打发时间。他住在一个N层的房子中,最底下为1层,最高处为N层。他从他家所在的第A层出发,并决定连续坐K次电梯。

但由于迷信的缘故,B在中国被视为是不幸运的,所以整座楼并没有第B层。也是因为这个原因,如果Cinzo想从第X层出发到达第Y层,他希望Y能满足|X - Y| < |X - B|。

每次电梯到达后,Cinzo都会将电梯所到的层数记录在小本子上;K次电梯都坐完后,他将得到一个长度为K的数列。现在,Cinzo想知道,他可能写出多少个不同的数列?

输入格式(lift.in)

一行四个整数,N,A,B,K,分别代表电梯的层数,Cinzo最初的位置,不幸运的层数,以及乘坐电梯的次数。

输出格式(lift.out)

一个整数,代表不同的数列数。(结果对1000,000,007取模)

样例输入

5 2 4 2

样例输出

2

数据范围与约束

对于20%的数据,N<=10, K<=5;

对于60%的数据,N,K<=100;

对于100%的数据,N,K<=5000。

#include<cmath>
#include<cstdio>
#include<algorithm>
#define mod 1000000007
using namespace std;
int n,a,b,k,ans;
long long f[][];
int sum[];
int main()
{
freopen("lift.in","r",stdin);
freopen("lift.out","w",stdout);
scanf("%d%d%d%d",&n,&a,&b,&k);
for(int i=;i<=n;i++)
{
if(abs(a-i)<abs(a-b) && i!=a) f[i][]=;
sum[i]=sum[i-]+f[i][];
}
for(int t=;t<=k;t++)
{
for(int i=;i<b;i++) f[i][t]=(f[i][t]+sum[(b+i+)/-]-sum[i]+sum[i-]+mod)%mod;
for(int i=b+;i<=n;i++) f[i][t]=(f[i][t]+sum[i-]-sum[(b+i)/+-]+sum[n]-sum[i]+mod)%mod;
for(int i=;i<=n;i++) sum[i]=(sum[i-]+f[i][t])%mod;
}
for(int i=;i<=n;i++) ans=(ans+f[i][k])%mod;
printf("%d",ans);
}

乒乓球

(game.cpp/c/pas)

(1s/256M)

问题描述

Gob和Michael常在一起打乒乓球。他们是这样决定比赛的输赢的:比赛由若干大局组成;谁最先赢下s大局谁就获得比赛的胜利;在每一大局中,谁先得t分就获得本大局的胜利。

在一次比赛中,他们只记录了比赛中的每一分是谁得的,但忘记了记录s和t。现在给出比赛的每一分的得分情况,求出所有可能的s和t。Gob保证,得分表是完整的,也就是在比赛恰好在最后一人,得到最后一分后结束。

输入格式(game.in)

第一行一个整数N,代表比赛一共得到了多少分。

第二行N个整数,代表比赛中每一分是谁得到的;1代表Gob,2代表Michael。

输出格式(game.out)

第一行一个整数M,代表共有多少种可能的s,t情况。

接下来M行每行两个整数si, ti,代表一种可能的s,t情况。M种情况按照s从小到大输出;在s相等时按照t从小到大输出。

样例输入1

5

1 2 1 2 1

样例输出1

2

1 3

3 1

样例输入2

5

1 2 2 2 1

样例输出2

0

样例输入3

10

1 1 2 1 1 1 2 2 1 1

样例输出3

3

1 7

3 2

7 1

数据范围与约束

对于50%的数据,N<=1000;

对于100%的数据,1<=N<=100,000。

枚举t,二分小局结束位置

#include<cstdio>
#include<algorithm>
#define N 100001
using namespace std;
int n,a[N],sum1[N],sum2[N];
struct node
{
int s,t;
bool operator < (node p)const
{
if(s!=p.s) return s<p.s;
return t<p.t;
}
}ans[N];
int main()
{
freopen("game.in","r",stdin);
freopen("game.out","w",stdout);
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",&a[i]);
for(int i=;i<=n;i++)
if(a[i]==) sum1[i]=sum1[i-]+,sum2[i]=sum2[i-];
else sum1[i]=sum1[i-],sum2[i]=sum2[i-]+;
int last,l,r,mid,tmp,cnt1,cnt2,now; int tot=;
for(int i=;i<=n;i++)
{
last=; cnt1=cnt2=;
while()
{
l=last+,r=n,mid,tmp=-;
while(l<=r)
{
mid=l+r>>;
if(sum1[mid]-sum1[last]>=i || sum2[mid]-sum2[last]>=i) tmp=mid,r=mid-;
else l=mid+;
}
if(tmp==-) break;
if(sum1[tmp]-sum1[last]==i) cnt1++,now=;
else cnt2++,now=;
if(tmp==n)
{
if(cnt1==cnt2 || cnt1>cnt2 && now== || cnt2>cnt1 && now==) break;
ans[++tot].t=i, ans[tot].s=max(cnt1,cnt2);
break;
}
last=tmp;
}
}
sort(ans+,ans+tot+);
printf("%d\n",tot);
for(int i=;i<=tot;i++) printf("%d %d\n",ans[i].s,ans[i].t);
}

2017 济南综合班 Day 5的更多相关文章

  1. 2017 济南综合班 Day 7

     a 两个指针L.R R开始指向恰好[R,n]有不超过k个逆序对的地方 随着L的右移,R指针只会右移 逆序对有2部分 1.L左侧与其他位置形成的逆序对 2.R右侧与其他位置形成的逆序对 用树状数组分别 ...

  2. 2017 济南综合班 Day 6

    循环移动 (cyclic.cpp/c/pas) (1s/256M) 问题描述 给出一个字符串S与N个操作.每个操作用三元组(L, R, K)进行描述:操作将字符串第L个到第R个位置构成的子串循环移动K ...

  3. 2017 济南综合班 Day 4

    T1 外星人 二维前缀和 #include<cstdio> #define N 1001 using namespace std; bool v[N][N]; int sum[N][N]; ...

  4. 2017 济南综合班 Day 3

    T1  黑化 题意: 求一个字符串是否可能包含另一个字符串 字符串中的?可以匹配任意字母 可能输出 God bless You! 一定不可能 输出 Game Over! 计算fail数组时,fail数 ...

  5. 2017 济南综合班 Day 2

    木棍(stick) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有很多木棍,具体的,总共有n根,且每根木棍都有一个长度.为了方便起见,我们可以用一个正 ...

  6. 2017 济南综合班 Day 1

    送分题(songfen) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK喜欢干一些有挑战的事,比如说求区间最大子段和.它知道这个题目有O(n)的做法.于 ...

  7. 2017 济南精英班 Day1

    不管怎么掰都是n*m-1 #include<cstdio> using namespace std; int main() { freopen("bpmp.in",&q ...

  8. JavaScript脚本语言基础(四)

    导读: JavaScript和DOM DOM文档对象常用方法和属性 DOW文档对象运用 JSON数据交换格式 正则表达式 1.JavaScript和DOM [返回] 文档对象模型(Document O ...

  9. JeeSite(2):导入数据,进入系统

    本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/50954485 未经博主同意不得转载. 博主地址是:http://blog.csd ...

随机推荐

  1. Java经典问题

    1.JAVA初学者都应该搞懂的问题 对于这个系列里的问题,每个学Java的人都应该搞懂.当然,如果只是学Java玩玩就无所谓了.如果你认为自己已经超越初学者了,却不很懂这些问题,请将你自己重归初学者行 ...

  2. Python面向对象-类成员

    类的成员可以分为三大类:字段.方法和属性: 注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存中就有多少个普通字段.而其他的成员,则都是保存在类中,即:无论对象的多少,在 ...

  3. JS原型与面向对象总结

    ECMAScript有两种开发模式:1.函数式(过程化),2.面向对象(OOP).面向对象的语言有一个标志,那就是类的概念,而通过类可以创建任意多个具有相同属性和方法的对象.但 是,ECMAScrip ...

  4. Median Weight Bead(最短路—floyed传递闭包)

    Description There are N beads which of the same shape and size, but with different weights. N is an ...

  5. 针对“来用”团队项目之NABC分析

    本项目特点之一:扩展性强 NABC分析: N(need):我们这个开发的这个软件主要是集娱乐软件和实用工具于一身的大容器,这里面有很多应用程序,针对不同用户需要,至少有一款应用程序能够满足用户的需要, ...

  6. Response.End方法

    文章:在try...catch语句中执行Response.End()后如何停止执行catch语句中的内容 调用Response.End()方法能保证,只输出End方法之前的内容. 调用Context. ...

  7. 使用LoadRunner脚本采集Linux性能数据

    前面介绍过在LoadRunner的Java协议实现“使用SSH连接Linux”.下面的脚本,是在LoadRunner里连接Linux/Unix远程服务器,收集其磁盘IO的负载到测试结果. 涉及到三个知 ...

  8. Windows资源监控工具大全

    在利用LoadRunner进行性能测试的时候,Windows服务器的资源是经常需要监控的对象.其实除了LoadRunner提供的计数器,似乎Window服务器并不像Unix或者Linux提供众多的性能 ...

  9. 【Json】C#格式化JSON字符串

    很多时候我们需要将json字符串以 {     "status": 1,     "sum": 9 }这种方式显示,而从服务端取回来的时候往往是这样 {&quo ...

  10. set(gcf,'DoubleBuffer','on')

    设置的目的是为了防止在不断循环画动画的时候会产生闪烁的现象,而这样便不会了.在动画的制作比较常用.