都可以从COGS上找到

纵横字谜krizaljka

时间限制: 1 Sec  内存限制: 32 MB

题目描述

给出两个单词,找到第一个相同的字母,然后第一个单词横数输出,第二个竖着输出形成十字形。

如果两个单词有多个位置的字母相同,则先考虑在第一个单词中位置靠前的相同字母。

例如,第一个单词是 “ABBA”,第二个单词是 “CCBB",形成的纵横字谜格式为:

.C..
.C..
ABBA
.B..

输入

第1行:2个空格分开的单词A和B,长度均不超过30个字符。

输出

令A长度为M,B长度为N,则输出共M行,每行N个字符。A单词橫着输出,B单词竖着输出。不是单词字母的位置填充句点'.'

样例输入

REPUBLIKA HRVATSKA

样例输出

H........

REPUBLIKA

V........

A........

T........

S........

K........

A........

Solution

考点:是否会编程

随便枚举,然后随便输出

Code

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
void Freopen() {freopen("krizaljka.in","r",stdin); freopen("krizaljka.out","w",stdout);}
void Fclose() {fclose(stdin); fclose(stdout);}
char s1[],s2[];
char S[][];
int main()
{
Freopen();
scanf("%s",s1+),scanf("%s",s2+);
int ls1=strlen(s1+),ls2=strlen(s2+);
int p1=,p2=;
for (int i=; i<=ls1; i++)
for (int j=; j<=ls2; j++)
if (s2[j]==s1[i] && !p1 && !p2) {p1=i,p2=j;}
for (int i=; i<=ls2; i++)
for (int j=; j<=ls1; j++)
S[i][j]='.';
for (int i=; i<=ls1; i++)
S[p2][i]=s1[i];
for (int j=; j<=ls2; j++)
S[j][p1]=s2[j];
for (int i=; i<=ls2; i++)
{
for (int j=; j<=ls1; j++)
putchar(S[i][j]);
if (i!=ls2) puts("");
}
Fclose();
return ;
}

毫无意义的代码



砍树eko

时间限制: 1 Sec  内存限制: 32 MB

题目描述

N棵树,每棵都有一个整数高度。有一个木头的总需要量M。

现在确定一个最大的统一的砍树高度H,如果某棵树的高度大于H,则高出的部分被砍下。使得所有被砍下的木材长度之和达到M(允许稍超过M)。

例如,有4棵树,高度分别是20 15 10 17, 需要的木材长度为 7,砍树高度为15时,第1棵树被砍下5,第4棵树被砍下2,得到的总长度为7。如果砍树高度为16时,第1棵树被砍下4,第4棵树被砍下1,则得到的木材数量为5。

输入

第1行:2个整数N和M,N表示树木的数量(1 ≤ N ≤ 1 000 000),M表示需要的木材总长度(1 ≤ M ≤ 2 000 000 000)。

第2行: N个整数表示每棵树的高度,值均不超过1  000  000  000。所有木材高度之和大于M,因此必然有解。

输出

第1行:1个整数,表示砍树的最高高度。

样例输入

5 20

4 42 40 26 46

样例输出

36

Solution

二分+判断   随便写....

Code

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
void Freopen() {freopen("eko.in","r",stdin); freopen("eko.out","w",stdout);}
void Fclose() {fclose(stdin); fclose(stdout);}
int read()
{
int x=,f=; char ch=getchar();
while (ch<'' || ch>'') {if (ch=='-') f=-; ch=getchar();}
while (ch>='' && ch<='') {x=x*+ch-''; ch=getchar();}
return x*f;
}
#define MAXN 1000010
int N,M,h[MAXN],maxh;
bool check(int x)
{
long long sum=;
for (int i=; i<=N; i++)
if (h[i]>x) sum+=h[i]-x;
return sum>=M;
}
int main()
{
Freopen();
N=read(),M=read();
for (int i=; i<=N; i++) h[i]=read(),maxh=max(maxh,h[i]);
int l=,r=maxh;
while (l<=r)
{
int mid=(l+r)>>;
if (check(mid)) l=mid+; else r=mid-;
}
printf("%d\n",l-);
Fclose();
return ;
}

又是一个毫无意义的代码



DNA

时间限制: 1 Sec  内存限制: 32 MB

题目描述

给出1个只有A、B组成的长度为N的字符串,现在给出两种变换方式:第一种是翻转一个字母,A变成B,或B变成A;第二种是翻转字符串某个字符的前缀(包括该字符),将前缀中所有的A变成B,或者所有的B变成A。

现在要把给出的字符串变成全A,问至少需要多少次变换操作。

输入

第1行: 一个正整数N(1<=N<=1000000),表示字符串的长度。
第2行: N个字符,要么是A,要么是B,表示初始字符串.

输出

第1行:一个整数,表示最少需要的翻转次数

样例输入

12

AAABBBAAABBB

样例输出

4

Solution

贪心或者DP

从最后一个位置开始从前往后扫,

如果遇见一个单个的'B'则单独修改ans++,如果遇见>=2个‘B'则前缀翻转ans++

翻转随便打个标记

Code

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
void Freopen() {freopen("dna.in","r",stdin); freopen("dna.out","w",stdout);}
void Fclose() {fclose(stdin); fclose(stdout);}
#define MAXN 1000100
int N,s[MAXN],ans;
char S[MAXN];
int main()
{
Freopen();
scanf("%d",&N);
scanf("%s",S+);
for (int i=; i<=N; i++) if (S[i]=='A') s[i]=; else s[i]=;
int i=N,f=;
while (i>=)
{
if ((f== && s[i]==) || (f== && s[i]==)) {i--; continue;}
if ((f== && s[i]== && s[i-]!=) || (f== && s[i]== && s[i-]!=)) {ans++; i--; continue;}
if ((f== && s[i]== && s[i-]==) || (f== && s[i]== && s[i-]==))
{
int j;
for (j=i; j>=; j--) if ((f== && s[i]==) || (f== && s[i]==)) {ans++; f^=; i=j; break;}
continue;
}
}
printf("%d\n",ans);
Fclose();
return ;
}

丑陋的代码



旅行

POD

现在让我们来对一个交通运输图进行研究,这可能是一个公交车的线路网、有轨电车线路网、地下铁的线路网或是其他的一个什么。这个图中的顶点(从1到n标号)为车站,边(pi ,pj)(这里pi ¹ pj)表示在顶点pi和顶点pj间存在一条直接连接两点的路(1 £ pi, pj £ n)。在图中有从1到k编号的k条运输路线,第l号路线是用一个车站序列pl,1, pl,2, …, pl,sl来描述的,它们为使用这个线路的车辆将依次经过的车站。并且我们给出它们之间的距离rl,1, rl,2, …, rl,sl-1,其中rl,i表示从车站pl,i到车站pl,i+1所需的时间。对于一条线路来说,它上面所有的车站都是不相同的(也就是说,若i ¹ j,则pl,i ¹ pl,j)。且线路l将以频率cl运行。这里cl为集合{6, 10, 12, 15, 20, 30 ,60}中的一个数,它表示每个小时的0, cl, 2cl, …, 60分钟的时候在路线l上的将有两辆车同时从车站pl,1和pl,sl出发相对着行进。

在这样一个运输网络中,我们想从其中的一个车站x出发用尽可能少的时间到达车站y。这里我们假设最少的时间不会超过24个小时,且在中途换车的时候的时间不计。

示例:

在下图中你可以看到一个具有六个车站和两条路线的运输网络。路线一上的车站序列为1、3、4、6,路线二上的车站序列为2、4、3、5,且两条路线的频率分别为c1=15和c2=20。车辆在各车站间移动时的耗费都分别用1和2的下标标在了图上。

现在我们假设在23点30分的时候我们在车站5想要到车站6去。我们必须等上10分钟才可以搭上一辆路线2的车离开。然后我们就面临着两种选择:一种是在23点51分到车站3等上3分钟并改乘路线1的车于0点16分到达车站6;另一种是在0点8分到达车站4等上13分钟再换路线1的车于0点31分到达车站6。显然最早我们能在0点16分到达车站6。

任务:

请写一个程序:

l 从文本文件POD.IN中读入对该交通运输网的描述、起点和终点、还有出发的时间;

l 找出从起点到终点的最少时间;

l 把最找到达终点的时间输出到文本文件POD.OUT中。

输入格式:

在文本文件POD.IN的第一行包括六个用空格分开的整数,分别为:

l n,1 £ n £ 1000,为车站的数目;

l k,1 £ k £ 2000,为路线的数目;

l x,1 £ x £ n,为起点的车站编号;

l y,1 £ y £ n,为终点的车站编号;

l gx,0 £ gx £ 23,为出发时间的小时数;

l mx,0 £ mx £ 59,为出发时间的分钟数。

车站是从1到n编号的,运输路线是用1到k编号的。以下的3k行为对运输路线的描述。这些行中每3行构成一个对一条路线的描述,第k个三行的意义如下:

l 第一行包括两个用空格分开的整数,sl(2 £ sl£ n)为该路线上车站的数目,还有cl({6, 10, 12, 15, 20, 30, 60}中的一个元素),为该路线运行的频率;

l 第二行包括sl个用空格分开的不同的整数,为pl,1, pl,2, …,pl,sl(1£ pl,i£ n),即该路线上的车站;

l 第三行包括sl-1个整数rl,1, rl,2, …,rl,sl-1为在路线上相邻两个车站间移动所需的时间(1£ rl,i£ 240)。

在所有的运输路线上的总车站数不超过4000(也就是说s1 + s2 + … + sk £ 4000)。

输出格式:

你的程序应该在文本文件POD.OUT中输出两个整数gy(0£ gy£ 23)和my(0£ my£ 59),表示到达y点时的小时数和分钟数。

样例:

输入(POD.IN):

6 2 5 6 23 30

4 15

1 3 4 6

9 12 10

4 20

5 3 4 2

11 17 11

输出(POD.OUT):

0 16

Solution

这个题还有点说的....

两个限制的最短路,首先可以证明最优性,早到一个点,一定不会比晚到要差

所以我们就可以转化成最短路了

正常的连边,边权记为时间,但是每条边额外记录两个东西(这条路径的频率c,和从这条路径的发车点到这条边需要经过的时间ct)

然后正常的Dijkstra的比较是dis+edge[i].v<dis[edge[i].to进行更新和放入堆中,这里只需要多计算一下等待的时间

有当前的时间,发车的频率,以及车到这个点的时间,就可计算出最快坐上车的时间(最短等待时间)

然后裸上最短路,算出到达终点的最短分钟,然后就可得到答案了

Code

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
void Freopen() {freopen("pod.in","r",stdin); freopen("pod.out","w",stdout);}
void Fclose() {fclose(stdin); fclose(stdout);}
int read()
{
int x=,f=; char ch=getchar();
while (ch<'' || ch>'') {if (ch=='-') f=-; ch=getchar();}
while (ch>='' && ch<='') {x=x*+ch-''; ch=getchar();}
return x*f;
}
int N,K,S,T,Gx,Mx;
struct EdgeNode{int next,to,t,c,ct,from;}edge[<<];
int head[],cnt=;
void AddEdge(int u,int v,int w,int c,int ct)
{
cnt++; edge[cnt].next=head[u]; head[u]=cnt; edge[cnt].to=v; edge[cnt].t=w;
edge[cnt].c=c; edge[cnt].ct=ct; edge[cnt].from=u;
}//c表示频率,ct表示开始时到这个点的时间和,t表示经过这条边的时间
struct CaseNode {int num,c; int R[],t[],st1[],st2[]; }cas[];
#define Pa pair<int,int>
priority_queue<Pa,vector<Pa> , greater<Pa> >q;
int dis[];
#define INF 0x7fffffff
void Dijkstra()
{
for (int i=; i<=N; i++) dis[i]=INF;
q.push( make_pair(,S) ); dis[S]=;
int at;
while (!q.empty())
{
int now=q.top().second;
int Dis=q.top().first;
q.pop();
for (int i=head[now]; i; i=edge[i].next)
{
int tmpt=(Dis+Mx-edge[i].ct); while (tmpt<=) tmpt+=; tmpt%=;
at=;
if (tmpt%edge[i].c==) at=Dis; else {int tt=tmpt/edge[i].c; int cz=(tt+)*edge[i].c-tmpt; at=Dis+cz;}
if (at + edge[i].t < dis[edge[i].to])
dis[edge[i].to]=at + edge[i].t,q.push(make_pair(dis[edge[i].to],edge[i].to));
}
}
}
int main()
{
Freopen();
N=read(),K=read(),S=read(),T=read(),Gx=read(),Mx=read();
for (int i=; i<=K; i++)
{
cas[i].num=read(),cas[i].c=read();
for (int j=; j<=cas[i].num; j++) cas[i].R[j]=read();
for (int j=; j<=cas[i].num-; j++) cas[i].t[j]=read(),cas[i].st1[j]=cas[i].st1[j-]+cas[i].t[j];
for (int j=; j<=cas[i].num-; j++) AddEdge(cas[i].R[j],cas[i].R[j+],cas[i].t[j],cas[i].c,cas[i].st1[j-]);
for (int j=cas[i].num-; j>=; j--) cas[i].st2[j]=cas[i].st2[j+]+cas[i].t[j];
for (int j=cas[i].num; j>=; j--) AddEdge(cas[i].R[j],cas[i].R[j-],cas[i].t[j-],cas[i].c,cas[i].st2[j]);
}
// for (int i=2; i<=cnt; i++) printf("%d--->%d %d %d %d\n",edge[i].from,edge[i].to,edge[i].t,edge[i].c,edge[i].ct);
Dijkstra();
// for (int i=1; i<=N; i++) printf("%d ",dis[i]); puts("");
int Gt=(dis[T]+Mx)/,Mt=dis[T];
printf("%d %d\n",(Gt+Gx)%,(Mt+Mx)%);
Fclose();
return ;
}

Code



启发:

think twice ,code once

要对拍!!T4就因为最后+=XXX写成了++然后就交了,结果炸成20,本来能AK的...

细节地方要反复推敲!

一次更愚蠢的NOIP模拟赛的更多相关文章

  1. 一次愚蠢的NOIP模拟赛

    找礼物[find.pas/find.c/find.cpp] [问题描述] 新年到了,突然间,就在那美丽的一霎那,你好友和你(K个人)的周围满是礼物,你发扬你帅气的风格,让你的好友先拿,但是每个人只能拿 ...

  2. 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...

  3. CH Round #55 - Streaming #6 (NOIP模拟赛day2)

    A.九九归一 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2355%20-%20Streaming%20%236%20(NOIP模拟赛day2)/九九归一 题 ...

  4. 【noip模拟赛4】Matrix67的派对 暴力dfs

    [noip模拟赛4]Matrix67的派对   描述 Matrix67发现身高接近的人似乎更合得来.Matrix67举办的派对共有N(1<=N<=10)个人参加,Matrix67需要把他们 ...

  5. NOIP模拟赛-2018.11.6

    NOIP模拟赛 今天想着反正高一高二都要考试,那么干脆跟着高二考吧,因为高二的比赛更有技术含量(我自己带的键盘放在这里). 今天考了一套英文题?发现阅读理解还是有一些困难的. T1:有$n$个点,$m ...

  6. NOI.AC NOIP模拟赛 第一场 补记

    NOI.AC NOIP模拟赛 第一场 补记 candy 题目大意: 有两个超市,每个超市有\(n(n\le10^5)\)个糖,每个糖\(W\)元.每颗糖有一个愉悦度,其中,第一家商店中的第\(i\)颗 ...

  7. 【HHHOJ】NOIP模拟赛 玖 解题报告

    点此进入比赛 得分: \(100+20+100=220\)(还不错) 排名: \(Rank\ 16\) \(Rating\):\(+20\) \(T1\):[HHHOJ263]「NOIP模拟赛 玖」三 ...

  8. 【HHHOJ】NOIP模拟赛 捌 解题报告

    点此进入比赛 得分: \(30+30+70=130\)(弱爆了) 排名: \(Rank\ 22\) \(Rating\):\(-31\) \(T1\):[HHHOJ260]「NOIP模拟赛 捌」Dig ...

  9. NOIP模拟赛20161022

    NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...

随机推荐

  1. Markdown:认识&入门

    来源:http://sspai.com/25137 一.认识 Markdown 在刚才的导语里提到,Markdown 是一种用来写作的轻量级「标记语言」,它用简洁的语法代替排版,而不像一般我们用的字处 ...

  2. 正在编译转换: 未能找到元数据文件 EntityFramework.dll

    错误 1 正在编译转换: 未能找到元数据文件“C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools\..\IDE\Enti ...

  3. ASP.NET MVC验证 - 自定义验证规则、验证2个属性值不等【待验证】

    提示:保存后才提示错误信息 自定义验证特性,继承ValidationAttribute并实现IClientValidatable 这次重写了基类的IsValid()方法的另外一个重载,因为该重载包含了 ...

  4. Flex String转Date

    在Flex中日期字符串转为Date类型,可以使用静态方法DateFormatter.parseDateString(str:String):Date方法. 该方法支持的字符串格式包括: YYYY-MM ...

  5. Html5 Egret游戏开发 成语大挑战(三)开始界面

    本篇需要在前面的素材准备完毕,才可以开始,使用egret的eui结合代码编辑,快速完成基本的界面搭建,这里写的可能比较细,目的是减少大家对于其中一些操作疑问,我去掉了很多无用的步骤,以最精简的流程来完 ...

  6. 代码整洁--使用CodeMaid自动程序排版

    在项目开发的过程中,如果只是验证命名规则.而没有统一程序排版,项目中很容易就会出现类似下列范例的程序代码产出.这样的产出,虽然能够正常地提供项目功能.并且符合微软的命名规则,但是因为程序排版凌乱的问题 ...

  7. 后台运行程序screen or nohup

    后台运行 方法1 &   方法2:screen screen –S lnmp à起个名字 进去后运行程序 Ctrl+ad à退出lnmp屏幕 Scree –ls à查看 Screen –r x ...

  8. document.elementFromPoint在IE8下无法稳定获取当前坐标元素的解决方法

    document.elementFromPoint(e.clientX, e.clientY) document.elementFromPoint(e.clientX, e.clientY) 执行2次 ...

  9. Chrome 监听 console 打开

    这个算是 Chrome only 其他的我没测试,也不想测试.因为我的控制台脚本仅仅在 Chrome 下加载. 如果你需要全平台,那么这肯定不是你需要的结果. 需求 其实我很早就想折腾这个了,但是,, ...

  10. UWP开源项目 LLQNotifier 页面间通信利器(移植EventBus)

    前言 EventBus是一个Android版本的页面间通信库,这个库让页面间的通信变得十分容易且大幅降低了页面之间的耦合.小弟之前玩Android的时候就用得十分顺手,现在玩uwp就觉得应该在这平台也 ...