北邮新生排位赛1解题报告d-e
话说cdsn要是前面插入源代码又什么都不放就会出现奇怪的源代码?不知道是哪个网页的
407. BLOCKS
KB
题目描述
给定一个N∗M的矩阵,求问里面有多少个由'#'组成的矩形,"There
are 5 ships.",若是里面有一个不是矩形的联通块,则输出"So Sad"
输入格式
1≤n,m≤1000
有多组数据,EOF结束。
输出格式
每行对应一个answer
输入样例
6 8
.....#.#
##.....#
##.....#
.......#
#......#
#..#...#
6 8
.....#.#
##.....#
###...##
.......#
##.....#
#..#...#
输出样例
There are 5 ships.
So Sad
好孩子们都用的bfs,不过因为时间足够所以我直接水过了
#include <cstdio>
using namespace std;
int len[1000][1000];
int width[1000][1000];
int readchar(){//just want to sleep
while(1){
char ch=getchar();
if(ch=='#')return 1;
if(ch=='.')return 0;
if(ch==EOF)return -1;
}
}
int main()
{
int n,m;
while(scanf("%d %d",&n,&m)==2){
for(int i=0;i<n;i++){
int l=0;
for(int j=0;j<m;j++){
int chsign=readchar();
if(chsign==0){
len[i][j]=0;
l=0;
}
else if(chsign==1){
len[i][j]=l+1;
l++;
}
}
}
bool ans=true;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(len[i][j]==0){
width[i][j]=0;
if(i&&len[i-1][j]&&j&&len[i][j-1]){
ans=false;
break;
}
}
if(i==0||(len[i-1][j]==0&&len[i][j+1]==0))width[i][j]=1;
if(i&&len[i-1][j]!=len[i][j]&&len[i-1][j]&&len[i][j]){
ans=false;
break;
}
}
if(!ans)break;
}
int ansi =0;
for(int i=n-1;i>=0;i--){
for(int j=m-1;j>=0;j--){
if(len[i][j]==0)continue;
if(i-1>=0&&len[i-1][j])continue;
if(j-1>=0&&len[i][j-1])continue;
ansi++;
}
}
if(!ans)printf("So Sad\n");
else printf("There are %d ships.\n",ansi);
}
return 0;
}
E. 数的关系 2014新生暑假个人排位赛01
KB
题目描述
用关系“<”和“=”将3个数A、B和C依序排列时有13种不同的序关系:
A=B=C,A=B<C,A<B=C,A<B<C,A<C<B,A=C<B,B<A=C,
B<A<C,B<C<A,B=C<A,C<A=B,C<A<B,C<B<A。
现在输入数字的个数,要求你给出上述关系的数目。
数的个数不大于100
输入格式
多组数据,EOF结束
每行一个输入
输出格式
对于每个输入,输出一行,即对应答案
输入样例
3
输出样例
13
明显是递推,但是递推公式推错了囧,而且还狂交一气
其实是dp
但是应该把当前状态分解成子状态,dp[n][m],递增的m个位置塞下n个字母,且没有位置是空的
import java.math.*;
import java.util.Scanner;
import java.io.*;
public class Main {
public static void main(String args[]){
BigInteger dp[][]=new BigInteger [101][101];
BigInteger ans[]=new BigInteger[101];
ans[0]=BigInteger.ZERO;
for(int i=0;i<101;i++){
for(int j=0;j<101;j++){
dp[i][j]=BigInteger.ZERO;
}
}
dp[1][1]=BigInteger.ONE;
for(int i=2;i<101;i++){
for(int j=1;j<=i;j++){
dp[i][j]=(dp[i-1][j-1].add(dp[i-1][j]));
dp[i][j]=dp[i][j].multiply(BigInteger.valueOf(j));
}
}
for(int i=1;i<101;i++){
ans[i]=BigInteger.ZERO;
for(int j=1;j<=i;j++){
ans[i]=ans[i].add(dp[i][j]);
}
}
Scanner cin=new Scanner(System.in);
while(cin.hasNext()){
int n=cin.nextInt();
System.out.println(ans[n]);
}
}
}
看了解题报告还是never兄的更好
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
using namespace std;
void print(int p[]){
printf("%d",p[p[0]]);//p[0]用于保存长度(数组)
for(int i=p[0]-1;i>=1;i--){
printf("%d",p[i]/1000%10);//防止有缺失,如某个数位上为0001的情况
printf("%d",p[i]/100%10);
printf("%d",p[i]/10%10);
printf("%d",p[i]%10);
}
printf("\n");
}
void bigintegeradd(int sum[],int p1[],int p2[]){
sum[0]=max(p1[0],p2[0]);
for(int i=1;i<=sum[0];i++){
sum[i]=p1[i]+p2[i];//ATTENTION高位需置为0
}
for(int i=1;i<=sum[0];i++){
sum[i+1]+=sum[i]/10000;
sum[i]%=10000;
}
if(sum[sum[0]+1]){
sum[0]++;//加法进位一位
}
}
void bigmultiply(int mul[],int p1[],int p2[]){
mul[0]=p1[0]+p2[0];//至少要有p1 p2长度之和+1长度
for(int i=1;i<=p1[0];i++){//不能自身同时为参数mul和p
for(int j=1;j<=p2[0];j++){
mul[i+j-1]=p1[i]*p2[j];
}
for(int j=1;j<=mul[0];j++){
mul[j+1]=mul[j]/10000;
mul[j]%=10000;
}
}
for(int i=mul[0]+1;i>=1;i--){
if(mul[i]==0){mul[0]--;}
else break;
}
}
void bigmultiplysingle(int p[],int a){//改变自身
for(int i=1;i<=p[0];i++){
p[i]*=a;
}
for(int i=1;i<=p[0];i++){
p[i+1]+=p[i]/10000;
p[i]%=10000;
}
while(p[p[0]+1]>0){
p[0]++;
p[p[0]+1]=p[p[0]]/10000;
p[p[0]]%=10000;
}
}
int dp[101][101][101];
int ans[101][203];
int main(){
for(int i=1;i<101;i++){
dp[i][1][0]=1;
dp[i][1][1]=1;
for(int j=2;j<=i;j++){
bigintegeradd(dp[i][j],dp[i-1][j],dp[i-1][j-1]);
// printf("dp[i-1][j-1] ");
// print(dp[i-1][j-1]);
// printf("dp[i-1][j] ");
// print(dp[i-1][j]);
// printf("after add :dp[i][j] ");
// printf("dp[i][j]len: %d\n",dp[i][j][0]);
//print(dp[i][j]);
// printf("after multiply %d: ",j);
bigmultiplysingle(dp[i][j],j);
// print(dp[i][j]);
// for(int k=dp[i][j][0];k>0;k--)printf("%d",dp[i][j][k]);
// printf("\n");
//printf("dp[i][j]len: %d\n\n",dp[i][j][0]);
}
}
for(int i=1;i<101;i++){
for(int j=1;j<101;j++){
bigintegeradd(ans[i],ans[i],dp[i][j]);
}
}
int n;
while(scanf("%d",&n)==1){
print(ans[n]);
}
}
北邮新生排位赛1解题报告d-e的更多相关文章
- 北邮新生排位赛1解题报告a-c
<div class="page-header" style="padding-bottom: 9px; margin: 20px 0px 30px; border ...
- 北邮新生排位赛2解题报告a-c
A. 丁神去谷歌 2014新生暑假个人排位赛02 时间限制 1000 ms 内存限制 65536 KB 题目描述 丁神要去Google上班了,去之前丁神想再做一道水题,但时间不多了,所以他希望题目做起 ...
- 北邮新生排位赛2解题报告d-e
<> 427. 学姐逗学弟 时间限制 3000 ms 内存限制 131072 KB 题目描述 学弟们来了之后,学姐每天都非常高兴的和学弟一起玩耍.这一天,学姐想出了这样一个游戏,她画了一棵 ...
- 2014北邮新生归来赛解题报告a-c
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255) ...
- 2014北邮新生归来赛解题报告d-e
D: 399. Who Is Joyful 时间限制 3000 ms 内存限制 65536 KB 题目描述 There are several little buddies standing in a ...
- SCNU ACM 2016新生赛决赛 解题报告
新生初赛题目.解题思路.参考代码一览 A. 拒绝虐狗 Problem Description CZJ 去排队打饭的时候看到前面有几对情侣秀恩爱,作为单身狗的 CZJ 表示很难受. 现在给出一个字符串代 ...
- SCNU ACM 2016新生赛初赛 解题报告
新生初赛题目.解题思路.参考代码一览 1001. 无聊的日常 Problem Description 两位小朋友小A和小B无聊时玩了个游戏,在限定时间内说出一排数字,那边说出的数大就赢,你的工作是帮他 ...
- 2017.7.15清北夏令营精英班Day1解题报告
成绩: 预计分数:20+10+40 实际分数:100+10+40. 一百三十多人的比赛全场rand7还水了个鼠标+键盘 unbelievable! 考试题目链接: https://www.luogu. ...
- LeetCode解题报告:Linked List Cycle && Linked List Cycle II
LeetCode解题报告:Linked List Cycle && Linked List Cycle II 1题目 Linked List Cycle Given a linked ...
随机推荐
- CodeBlocks使用技巧
快键键 注释:选中后Shfit + C 取消注释:选中后Shfit + X 查找替换:Ctrl + R Build(Ctrl + F9) Run (Ctrl + F10) Build + Run (F ...
- Java编程思想学习笔记_3(继承,内部类)
一.继承与清理 如果某个类需要去清理自身的资源,那么必须用心为其创建回收垃圾的方法,而如果此类有导出的子类,那么必须在导出类中覆盖回收的方法,当覆盖被继承类的回收垃圾的方法的时候,需要注意销毁的顺序应 ...
- Mysql的最佳优化经验20多条
原文:http://blog.csdn.net/lifuxiangcaohui/article/details/6207801 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其 ...
- D3.js 交互式操作
与图表的交互,指在图形元素上设置一个或多个监听器,当事件发生时,做出相应的反应. 一.什么是交互 交互,指的是用户输入了某种指令,程序接受到指令之后必须做出某种响应.对可视化图表来说,交互能使图表更加 ...
- MyBatis学习笔记(二) 关联关系
首先给大家推荐几个网页: http://blog.csdn.net/isea533/article/category/2092001 没事看看 - MyBatis工具:www.mybatis.tk h ...
- Myeclipse6.5项目启动时由于数据库连接失败的错误日志
Java HotSpot(TM) 64-Bit Server VM warning: MaxNewSize (524288k) is equal to or greater than the enti ...
- x^y=(x&~y)|(~x&y)证明
我见过最棒的证明是文氏图:(首先要知道二元布尔代数是集合的特殊情况,所以把X和Y当作两个集合,结论成立,那么在二元布尔代数里面也成立.)左边的圈是X,右边的圈是Y.如果是OR 也就是取或,中间的白色的 ...
- 5-2-2 printf参数从右往左压栈
5-2-2 C中printf计算参数时是从右到左压栈的 #include <stdio.h> int main (int argc, char **argv) { ; ,,,,}; int ...
- struts2文件下载相关信息
struts.xml文件配置: <span style="font-size:16px;"><?xml version="1.0" encod ...
- 完美解决Informix的中文乱码问题
完美解决Informix的中文乱码问题 Informix是IBM旗下的一款数据库,要不是这个项目需要,估计这辈子我都不知道居然还有这么一款数据库.想来公司的项目遍布全国各地,各种部署环境各种应用场景 ...