希望
【题目描述】
网页浏览器者有后退与前进按钮,一种实现这两个功能的方式是用两个栈,
“前进栈”、“后退栈”。
这里你需要实现以下几个功能:
BACK: 如果“后退栈”为空则忽略此命令。 否则将当前两面压入“前进栈”,
从“后退栈”中取出栈顶页面,并设置为当前页面。
FORWARD: 如果“前进栈”为空则忽略此命令。否则将当前两面压入“后
退栈”,从“前进栈”中取出栈顶页面,并设置为当前页面。
VISIT: 将当前页面压入“后退栈”、 并将当前页面置为指定页面, 并将“前
进栈”置空。
QUIT: 退出。
假设此浏览器初始页面为 http://www.acm.org/
【输入格式】
输入为一系列命令:BACK, FORWARD, VISIT 和 QUIT,页面网址为不含空
格的字符串
假设任一时刻任意时刻两个栈中的元素都不会超过 100。
最后一个命令为 QUIT。
【输出格式】
输对于除 QUIT 外所有命令,输出当前页面(网址)
如果该命令被忽略则输出“Ignored”。
【样例输入】
VISIT http://acm.ashland.edu/
VISIT http://acm.baylor.edu/acmicpc/
BACK
BACK
BACK
FORWARD
VISIT http://www.ibm.com/
BACK
BACK
FORWARD
FORWARD
FORWARD
QUIT
【样例输出】
http://acm.ashland.edu/
http://acm.baylor.edu/acmicpc/
http://acm.ashland.edu/
http://www.acm.org/
Ignored
http://acm.ashland.edu/
http://www.ibm.com/
http://acm.ashland.edu/
http://www.acm.org/
http://acm.ashland.edu/
http://www.ibm.com/
Ignored
【样例解释】
无。
【数据范围与规定】
对于100%的数据,操作数量不超过1000,每行字符串长度不超过500。

/*开始手残多写个++*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 210
using namespace std;
int top1,top2;
string s1[maxn],s2[maxn],c,now,web;
int main()
{
freopen("kami.in","r",stdin);
freopen("kami.out","w",stdout);
now="http://www.acm.org/";
while(){
cin>>c;
if(c=="QUIT")break;
if(c=="VISIT"){
cin>>web;top2+=;top1=;
s2[top2]=now;now=web;
}
if(c=="BACK"){
if(top2==){
cout<<"Ignored"<<endl;
continue;
}
else{
top1+=;s1[top1]=now;
now=s2[top2];top2-=;
}
}
if(c=="FORWARD"){
if(top1==){
cout<<"Ignored"<<endl;
continue;
}
else{
top2+=;s2[top2]=now;
now=s1[top1];top1-=;
}
}
cout<<now<<endl;
}
return ;
}


【问题描述】
令?(?)为斐波那契数列第?项,其中?(0) = ?(1) = 1,?(?) = ?(? −1) +
?(? −2)。
所以要干啥呢?
求?(?(?))。
【输入格式】
第一行一个整数?代表数据组数。
接下来?行每行一个整数?。
【输出格式】
?行每行一个整数代表答案对10 9 + 7取模的值。
【样例输入】
4
0
1
2
6
【样例输出】
0
1
1
21
【样例解释】
无。
【数据规模与约定】
215 490。
70%的数据,1 ≤ ? ≤ 10 5 。
对于100%的数据,1 ≤ ? ≤ 10 3 ,1 ≤ ? ≤ 10 100 。
暴力矩阵乘法40

#include<iostream>
#include<cstdio>
#include<cstring>
#define mod 1000000007
#define ll long long
using namespace std;
ll T,n,f[][],a[][];
void mul(ll a[][],ll b[][]){
ll c[][];memset(c,,sizeof(c));
for(int i=;i<;i++)
for(int j=;j<;j++)
for(int k=;k<;k++)
c[i][j]=(c[i][j]+a[i][k]*b[k][j]%mod)%mod;
for(int i=;i<;i++)
for(int j=;j<;j++)
a[i][j]=c[i][j];
}
int main()
{
freopen("na.in","r",stdin);
freopen("na.out","w",stdout);
cin>>T;
while(T--){
cin>>n;
ll x=,y=,z=;
for(int i=;i<=n;i++){
z=x+y;y=x;x=z;
}
if(z==){cout<<<<endl;continue;}
if(z==||z==){cout<<<<endl;continue;}
n=z-;
f[][]=;f[][]=;f[][]=;f[][]=;
a[][]=;a[][]=;a[][]=;a[][]=;
while(n){
if(n&)mul(f,a);
mul(a,a);n>>=;
}
cout<<f[][]<<endl;
}
return ;
}

正解%%%

/*
mod了几个神奇的数
具体为啥 还在思考中23333
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
using namespace std;
const ll mod=;
ll T,n,f[][],a[][],len;
char s[];
ll Mod(){
ll r=,mo=(mod*+)*;
for(int i=;i<len;i++)
r=(r*+s[i]-'')%mo;
return r;
}
void mul(ll a[][],ll b[][],ll mo){
ll c[][];memset(c,,sizeof(c));
for(int i=;i<;i++)
for(int j=;j<;j++)
for(int k=;k<;k++)
c[i][j]=(c[i][j]+a[i][k]*b[k][j]%mo)%mo;
for(int i=;i<;i++)
for(int j=;j<;j++)
a[i][j]=c[i][j];
}
int main()
{
freopen("na.in","r",stdin);
freopen("na.out","w",stdout);
cin>>T;
while(T--){
memset(s,,sizeof(s));
cin>>s;len=strlen(s);
n=Mod();
if(n==){cout<<<<endl;continue;}
if(n==||n==){cout<<<<endl;continue;}
n=n-;
f[][]=;f[][]=;f[][]=;f[][]=;
a[][]=;a[][]=;a[][]=;a[][]=;
while(n){
if(n&)mul(f,a,mod*+);
mul(a,a,mod*+);n>>=;
}
n=f[][];n-=;
f[][]=;f[][]=;f[][]=;f[][]=;
a[][]=;a[][]=;a[][]=;a[][]=;
while(n){
if(n&)mul(f,a,mod);
mul(a,a,mod);n>>=;
}
cout<<f[][]<<endl;
}
return ;
}


【问题描述】
你现在希望组建一支足球队,一支足球队一般来说由11人组成。这11人有四
种不同的职业:守门员、后卫、中锋、前锋组成。你在组队的时候必须满足以下
规则:
1 足球队恰好由11人组成。
2 11人中恰好有一名守门员,3-5 名后卫,2-5 名中锋,1-3 名前锋。
3 你需要从这11人中选出一名队长。
4、 你这个足球队的价值是11人的价值之和再加上队长的价值, 也就是说
队长的价值会被计算两次。
5、 你这个足球队的花费是11人的花费之和, 你的花费之和不能超过给定
的上限。
现在告诉你球员的总数,每个球员的职业、价值、花费,以及花费的上限,
你希望在满足要求的情况下,达到以下目标:
1 最大化队伍的价值。
2 在最大化队伍的价值的情况下,最小化队伍的花费。
3、 在满足以上两个要求的情况下,有多少种选择球员的方案。如果有两
种方案它们的区别仅仅是队长不一样, 那么这两种方案应该被认为是
一种方案。
你的任务是输出这三个值:价值、花费、方案数。
【输入格式】
第一行一个正整数?,代表可选的球员个数。
接下来?行,每行描述一个球员的信息。每行开始是一个字符串,可能的字
符串有 Goalkeeper、Defender、Midfielder、Forward,分别代表该球员的职业是守
门员、后卫、中锋、前锋。接下来两个数?,?,分别代表该球员的价值和花费。
最后一行一个整数,代表花费的上限。
数据保证一定存在一种解。
【输出格式】
一行三个整数,分表代表最大价值、最小花费和方案数。如果方案数超过了
10 9 ,则直接输出10 9 。
【样例输入】
15
Defender 23 45
Midfielder 178 85
Goalkeeper 57 50
Goalkeeper 57 50
Defender 0 45
Forward 6 60
Midfielder 20 50
Goalkeeper 0 50
Midfielder 64 65
Midfielder 109 70
Forward 211 100
Defender 0 40
Defender 29 45
Midfielder 57 60
Defender 52 45
600
【样例输出】
716 600 2
【样例解释】
选择所有的五名后卫,选择价值为178,20,54,109的中锋和价值为6的前锋,
两名守门员任意选择。选择价值为178的中锋作为队长。
【数据规模与约定】
3? ≤ 20。
60%的数据,费用上限足够大。
对于100%的数据, 1 ≤ ? ≤ 500, 所有球员的价值和花费以及花费上限均在

暴力30

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 1010
#define ll long long
using namespace std;
ll n,c[maxn],r[maxn],v[maxn],mx,cost,sum,lim,f[maxn];
string s;
void Dfs(ll now,ll c1,ll c2,ll c3,ll c4,ll V,ll C,ll mxx){
if(C>lim)return;
if(c1>||c2>||c3>||c4>)return;
if(now==n+){
if(c1+c2+c3+c4!=)return;
if(c1<||c2<||c3<||c4<)return;
if(V+mxx>mx||(V+mxx==&&mx==)){
mx=V+mxx;cost=C;sum=;
}
else if(V+mxx==mx)sum++;
return;
}
if(r[now]==)Dfs(now+,c1+,c2,c3,c4,V+v[now],C+c[now],max(mxx,v[now]));
if(r[now]==)Dfs(now+,c1,c2+,c3,c4,V+v[now],C+c[now],max(mxx,v[now]));
if(r[now]==)Dfs(now+,c1,c2,c3+,c4,V+v[now],C+c[now],max(mxx,v[now]));
if(r[now]==)Dfs(now+,c1,c2,c3,c4+,V+v[now],C+c[now],max(mxx,v[now]));
Dfs(now+,c1,c2,c3,c4,V,C,mxx);
}
int main()
{
freopen("wosa.in","r",stdin);
freopen("wosa.out","w",stdout);
ll x,y;
cin>>n;
for(ll i=;i<=n;i++){
cin>>s>>x>>y;
v[i]=x;c[i]=y;
if(s=="Goalkeeper")r[i]=;
if(s=="Defender")r[i]=;
if(s=="Midfielder")r[i]=;
if(s=="Forward")r[i]=;
}
cin>>lim;
Dfs(,,,,,,,);
cout<<mx<<" "<<cost<<" "<<sum<<endl;
return ;
}

正解dp

/*
考试的时候觉得类似背包的搞搞
然而没写出来......
对于方案数有点怂 没啥好办法
最后直接暴力 还被卡掉一个点QAQ
f[a][b][c][d][e]表示4中人非别选了abcd个人
因为还有个很蛋疼的队长 还有方案数
所以在+上几个值 多一维012 分别表示最大价值 方案数 队长价值
节约空间逆序循环 把到那一个人的第一位扔了
然后枚举到那个人 然后五维费用的背包跑跑
注意更新的时候比较麻烦 具体看代码
然后统计一下最大val 以及对应的cost anss
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 1010
#define mod 1000000000
using namespace std;
int n,f[][][][][maxn][],L[],R[],lim,ansv,ansc=0x7fffffff,anss;
string s;
struct node{
int v,c,r;
}p[maxn];
int cmp(const node &x,const node &y){
if(x.v==y.v)return x.c>y.c;
return x.v<y.v;
}
void Up(int a,int b,int c,int d,int e,int r,int s,int mx){
if(f[a][b][c][d][e][]<r){
f[a][b][c][d][e][]=r;
f[a][b][c][d][e][]=;
f[a][b][c][d][e][]=mx;
}
if(f[a][b][c][d][e][]==r&&f[a][b][c][d][e][]<mx){
f[a][b][c][d][e][]=;
f[a][b][c][d][e][]=mx;
}
if(f[a][b][c][d][e][]==r&&f[a][b][c][d][e][]==mx){
f[a][b][c][d][e][]+=s;
if(f[a][b][c][d][e][]>mod)f[a][b][c][d][e][]=mod;
}
}
void Insert(int x){
for(int a=R[]-(p[x].r==);a>=;a--)
for(int b=R[]-(p[x].r==);b>=;b--)
for(int c=R[]-(p[x].r==);c>=;c--)
for(int d=R[]-(p[x].r==);d>=;d--)if(a+b+c+d<)
for(int e=lim-p[x].c;e>=;e--)
if(f[a][b][c][d][e][]){
int val=p[x].v+f[a][b][c][d][e][];
Up(a+(p[x].r==),b+(p[x].r==),c+(p[x].r==),d+(p[x].r==),e+p[x].c,val,f[a][b][c][d][e][],p[x].v);
}
}
int main()
{
freopen("wosa.in","r",stdin);
freopen("wosa.out","w",stdout);
cin>>n;
int V,C;
L[]=;L[]=;L[]=;L[]=;
R[]=;R[]=;R[]=;R[]=;
for(int i=;i<=n;i++){
cin>>s>>V>>C;
if(s=="Goalkeeper")p[i].r=;
if(s=="Defender")p[i].r=;
if(s=="Midfielder")p[i].r=;
if(s=="Forward")p[i].r=;
p[i].v=V;p[i].c=C;
}
cin>>lim;
sort(p+,p++n,cmp);
f[][][][][][]=;
f[][][][][][]=-;
for(int i=;i<=n;i++)Insert(i);
for(int a=L[];a<=R[];a++)
for(int b=L[];b<=R[];b++)
for(int c=L[];c<=R[];c++)
for(int d=L[];d<=R[];d++)
if(a+b+c+d==)
for(int e=;e<=lim;e++){
if(f[a][b][c][d][e][]==)continue;
int val=f[a][b][c][d][e][]+f[a][b][c][d][e][];
if(val>ansv){
ansv=val;ansc=e;
anss=;
}
if(val==ansv&&e<ansc){
ansc=e;anss=;
}
if(val==ansv&&e==ansc){
anss+=f[a][b][c][d][e][];
if(anss>mod)anss=mod;
}
}
cout<<ansv<<" "<<ansc<<" "<<anss<<endl;
return ;
}

10.3 noip模拟试题的更多相关文章

  1. 10.26 noip模拟试题

    enc[问题背景]zhx 和他的妹子聊天.[问题描述]考虑一种简单的加密算法.假定所有句子都由小写英文字母构成,对于每一个字母,我们将它唯一地映射到另一个字母.例如考虑映射规则:a->b, b- ...

  2. 10.27 noip模拟试题

    1.铺瓷砖(tile.cpp/c/pas)[问题描述]有一面很长很长的墙. 你需要在这面墙上贴上两行瓷砖. 你的手头有两种不同尺寸的瓷砖,你希望用这两种瓷砖各贴一行.瓷砖的长可以用分数表示,贴在第一行 ...

  3. 10.24 noip模拟试题

    尼玛pdf依旧不会粘23333 /* 每段合并到总的里面 假设总的有X个 这一段有Y个 一共有X+1个空 那么就有 C(X+1,1)+C(X+1,2)+C(X+1,3)+...+C(X+1,Y) 这样 ...

  4. 10.18 noip模拟试题

    分火腿 (hdogs.pas/.c/.cpp) 时间限制:1s:内存限制 64MB 题目描述: 小月言要过四岁生日了,她的妈妈为她准备了n根火腿,她想将这些火腿均分给m位小朋友,所以她可能需要切火腿. ...

  5. 10.13 noip模拟试题

    Porble 1时间与空间之旅(tstrip.*) 题目描述 公元22××年,宇宙中最普遍的交通工具是spaceship.spaceship的出现使得星系之间的联系变得更为紧密,所以spaceship ...

  6. 10.11 noip模拟试题

    4题均为128M,1s 1. 锻炼计划(exercise.pas) 身体是革命的本钱,OIers不要因为紧张的学习和整天在电脑前而忽视了健康问题.小x设计了自己的锻炼计划,但他不知道这个计划是否可行, ...

  7. 10.8 noip模拟试题

      1.花 (flower.cpp/c/pas) [问题描述] 商店里出售n种不同品种的花.为了装饰桌面,你打算买m支花回家.你觉得放两支一样的花很难看,因此每种品种的花最多买1支.求总共有几种不同的 ...

  8. 10.4 noip模拟试题

    题目名称 PA 青春 三部曲 名称 huakai taritari truetears 输入 huakai.in taritari.in truetears.in 输出 huakai.out tari ...

  9. 10.25 noip模拟试题

    今天题目略水2333 依旧不粘题目了23333 T1 /*数学题 给定n个斜率 求有多少个三元组 保证两两斜率不同 ans=C(n,3)-ΣC(len[i],2)*(n-len[i])-ΣC(len[ ...

随机推荐

  1. iOSシステム構成の纏め

    iOSのアーキテクチャ a)       iOSのアーキテクチャは階層化されている最上位レベルでは.iOSはそれが稼働しているハードウェアとアプリケーションの間の仲介役を果たします.アプリケーションが ...

  2. java中如何实现全局变量

    有时一个项目中会多处涉及到路径,当你把这个项目移植到别的电脑上时就要一一修改这些路径,过程十分繁琐,所以一个全局变量在这时是必不可少的. 遗憾的是java等oo语言并没有全局变量,这怎么办呢?下面介绍 ...

  3. C语言结构体的对齐原则

    Q:关于结构体的对齐,到底遵循什么原则?A:首先先不讨论结构体按多少字节对齐,先看看只以1字节对齐的情况: #include <stdio.h> #include <string.h ...

  4. jstat命令(Java Virtual Machine Statistics Monitoring Tool)

    1.介绍 Jstat用于监控基于HotSpot的JVM,对其堆的使用情况进行实时的命令行的统计,使用jstat我们可以对指定的JVM做如下监控: - 类的加载及卸载情况 - 查看新生代.老生代及持久代 ...

  5. Service Trace Viewer Tool (SvcTraceViewer.exe)

    Service Trace Viewer Tool <?xml version="1.0" encoding="utf-8" ?> <conf ...

  6. Bitmap 与Drawable相互转换

    Drawable 转 Bitmap import android.graphics.Bitmap; import android.graphics.drawable.Drawable; import ...

  7. Google Map API 学习三

  8. JQuery中如何click中传递参数

    代码如下: click(data,fn)中的data其实是json对象,取的时候,只能通过当前的事件源来取,data是默认放在event中的,所以这里的data是eventdata,引用的时候也使用e ...

  9. 【算法入门】广度/宽度优先搜索(BFS)

    广度/宽度优先搜索(BFS) [算法入门] 1.前言 广度优先搜索(也称宽度优先搜索,缩写BFS,以下采用广度来描述)是连通图的一种遍历策略.因为它的思想是从一个顶点V0开始,辐射状地优先遍历其周围较 ...

  10. openstack grizzly版network网络节点安装

    版本以及源的配置和控制节点一致 1.安装完操作系统已经apt源配置完成之后,一定要执行 apt-get update root@cloud:~# mv /etc/apt/sources.list /e ...