[无主题] 三题



1.LGTB 玩扫雷



题意

在一个n m 的棋盘上,有位置上有雷(用“*” 表示),其他位置是空地(用“.” 表示)。
LGTB 想在每个空地上写下它周围8 个方向相邻的格子中有几个雷。
请帮助他输出写了之后的棋盘



输入
输入第一行包含两个整数n, m 代表棋盘大小
接下来n 行,每行m 个字符,代表棋盘
1≤n,m≥1000



输出
输出包含n 行,每行m 个字符,代表LGTB 写了数字之后的棋盘



样例

样例输入
3 3
*.*
...
*.*

样例输出
*2*
242
*2*



提示:暴力

 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 int zl[2][8]={{1,1,1,0,0,-1,-1,-1},{-1,0,1,-1,1,-1,0,1}};
 5 int a[1005][1005];
 6 int n,m;
 7 void sol(int x,int y);
 8 bool can(int x,int y);
 9 int main()
10 {
11     cin>>n>>m;
12     for(int i=1;i<=n;i++)
13     for(int j=1;j<=m;j++)
14     {
15         char w;
16         scanf("%c",&w);
17         while(w!=‘*‘&&w!=‘.‘)
18         scanf("%c",&w);
19         if(w==‘*‘)
20         {
21             a[i][j]=-1;
22             sol(i,j);
23         }
24     }
25     for(int i=1;i<=n;i++)
26     {
27         for(int j=1;j<=m;j++)
28         {
29             if(a[i][j]==-1)printf("*");
30             else printf("%d",a[i][j]);
31         }
32         printf("\n");
33     }
34     return 0;
35 }
36 bool can(int x,int y)
37 {
38     if(a[x][y]==-1)return false;
39     if(x<1||y<1||x>n||y>m)return false;
40     return true;
41 }
42 void sol(int x,int y)
43 {
44     for(int i=0;i<=7;i++)
45     {
46         int qx=x+zl[0][i];
47         int qy=y+zl[1][i];
48         if(can(qx,qy))
49             a[qx][qy]++;
50     }
51     return ;
52 }

2.LGTB 学分块



题意

LGTB 最近在学分块,但是他太菜了,分的块数量太多他就混乱了,所以只能分成3 块
今天他得到了一个数组,他突然也想把它分块,他想知道,把这个数组分成3 块,块可以为空。假设3 块各
自的和中的最大值最小
请输出分完之后3 块中的最大值



输入

输入第一行包含一个整数n 代表数组大小
接下来n 个整数a1, a2, ..., an,代表数组
对于40% 的数据,1≤n≥10
对于70% 的数据,1≤n≥103
对于100% 的数据,1≤n≥105, 1≤ai≥107



输出
输出包含1 个整数,代表分块完成后3 块中的最大值



样例



样例输入

10
2 5 1 4 7 3 6 2 5 1

样例输出
14



提示:二分

注意:ans=0x3f3f3f3f3f3f3f3fLL;   LL很重要!!!  默认是long,不够long long;

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<string>
 5 #include<cstdlib>
 6 using namespace std;
 7 int n;
 8 long long ans=0x3f3f3f3f3f3f3f3fll;
 9 int a[100005];
10 long long sum[100005];
11 int main()
12 {
13     cin>>n;
14     for(int i=1;i<=n;i++)
15     {
16         sum[i]=sum[i-1];
17         scanf("%d",&a[i]);
18         sum[i]+=a[i];
19     }
20     if(n==1)
21     {
22         cout<<a[1];
23         return 0;
24     }
25     if(n==2)
26     {
27         cout<<max(a[1],a[2]);
28         return 0;
29     }
30     for(int i=1;i<=n;i++)
31     {
32         long long sum_1=sum[i-1];
33         int l=i+1,r=n+1;
34         while(l+1<r)
35         {
36             int mid=(l+r)>>1;
37             if(sum[mid-1]-sum_1<=sum[n]-sum[mid-1])
38             l=mid;
39             else r=mid;
40         }
41         long long sum_2=sum[l-1]-sum_1;
42         long long sum_3=sum[n]-sum[l-1];
43         ans=min(ans,max(sum_1,max(sum_2,sum_3)));
44         sum_2=sum[l]-sum_1;
45         sum_3=sum[n]-sum[l];
46         ans=min(ans,max(sum_1,max(sum_2,sum_3)));
47     }
48     cout<<ans<<endl;
49     return 0;
50 }

3.LGTB 玩THD



提示:动态规划

易错点:F[i][j]         第 i 个士兵在还能打 j 次取得(包括两种情况:1.塔打死了,没有钱。。。     2.我打死了,有钱!)

    初值负无穷,f[0][1]=0;/*因为人比塔先打 人初始有一次*/ ans=-100000;

     j 按照题上数组来算;

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<algorithm>
 6 using namespace std;
 7 struct soldier{
 8     int h,g,ta_time,s_time;
 9 }s[105];
10 int ans=-100000;
11 int P,Q,n;
12 int f[105][1005];
13 int main()
14 {
15     cin>>P>>Q>>n;
16     for(int i=1;i<=n;i++)
17     {
18         scanf("%d%d",&s[i].h,&s[i].g);
19         s[i].ta_time=(s[i].h-1)/Q;
20         s[i].s_time=(s[i].h-s[i].ta_time*Q-1)/P+1;
21     }
22     for(int i=0;i<=n;i++)
23     for(int j=0;j<=1004;j++)
24     f[i][j]=-1000000000;
25     f[0][1]=0;
26     for(int i=1;i<=n;i++)
27     for(int j=0;j<=1004;j++)
28     {
29         if(f[i][j+s[i].ta_time+1]<f[i-1][j])
30            f[i][j+s[i].ta_time+1]=f[i-1][j];
31         if(j>=s[i].s_time-s[i].ta_time)
32         {
33         if(f[i][j-s[i].s_time+s[i].ta_time]<f[i-1][j]+s[i].g)
34            f[i][j-s[i].s_time+s[i].ta_time]=f[i-1][j]+s[i].g;
35         }
36     }
37     for(int j=0;j<=1004;j++)
38     ans=max(ans,f[n][j]);
39     printf("%d\n",ans);
40     return 0;
41 }
时间: 2024-12-09 08:18:45

[无主题] 三题的相关文章

2016/1/12 第一题 输出 i 出现次数 第二题 用for循环和if条件句去除字符串中空格 第三题不用endwith 实现尾端字符查询

1 import java.util.Scanner; 2 3 4 public class Number { 5 6 private static Object i; 7 8 /* 9 *第一题 mingrikejijavabu中字符“i” 出现了几次,并将结果输出*/ 10 public static void main(String[] args) { 11 12 String r ="imingrikejijavabi"; 13 14 15 //第一种 截取 16 int a=

Leetcode第三题_Longest Substring Without Repeating Characters

Longest Substring Without Repeating Characters Total Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", which the

2014马哥Linux0217中对0214三题的解答

前几天在做2014马哥Linux0214的作业的时候,发现其实这三题在0217中有解答,当然觉得马哥比自己写得好太多,所以忍不住要把马哥的答案贴出来,以供自己学习. 第一题:写一个脚本,用for循环实现显示/etc/init.d/functions./etc/rc.d/rc.sysinit./etc/fstab有多少行 #!/bin/bash for fileName in /etc/init.d/functions /etc/rc.d/rc.sysinit /etc/fstab;do line

输入金额,SpannableStringBuilder,Dialog无主题和透明背景的使用

转载请注明出处:http://blog.csdn.net/forwardyzk/article/details/43308573 整理了开发汇中遇到的一些小细节. 1.在EditText中输入金额,只能输入正确的金额格式,例如:0.01,0.1,0,123,123.0,123.01 activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:too

LeetCode 第三题,Longest Substring Without Repeating Characters

题目: Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", which the length is 3. For "bbbbb" the longest s

Java-集合-第三题 有如下Student 对象, private String name; private int age; private int score; private String classNum; 其中,classNum 表示学生的班号,例如“class05”。 有如下List List list = new ArrayList(); l

第三题 有如下Student 对象, private String name; private int age; private int score; private String classNum; 其中,classNum 表示学生的班号,例如“class05”. 有如下List List list = new ArrayList(); list.add(new Student(“Tom”, 18, 100, “class05”)); list.add(new Student(“Jerry”,

NOIP2005-普及组复赛-第三题-采药

题目描述 Description 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值.我会给你一段时间,在这段时间里,你可以采到一些草药.如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大.” 如果你是辰辰,你能完成这个任务吗? 输入输出格式 Input/output 输入格式:输

2014百度之星资格赛第三题

Xor Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 132768/132768 K (Java/Others) Total Submission(s): 7837    Accepted Submission(s): 3350 Problem Description Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含了N个正整数,随后 Prometheus 将向 Z

第二题、第三题、第四题

1.以编程方式操作 HttpCachePolicy 类. HttpCachePolicy.SetExpires HttpCachePolicy.SetCacheability |NoCache|Private|Public|Server|ServerAndNoCache |ServerAndPrivate 2<%@ OutputCache Duration="60" VaryByParam="None" %>Duration 和 VaryByParam