Test on 11/10/2018

杭电半日游,这新生赛出的题目比较简单,刚开始四十分钟写了三道题,并拿了一个一血,得到气球超开心。

可是后来就写不出来了,还是学的太少。

感觉还是有增长信心的,虽然感觉自己以前学过欺负他们,但是我也忘完了呀。

还是要努力啊QAQ

不要丧失希望,永远保持斗志,加油吧。

A:热烈的决斗者

Description

Jeff正在玩一种卡牌游戏,在这个游戏中,每个回合玩家可以执行以下两种操作无数次:

1.使用一张手上的牌。
2.命令场上的一只生物对敌方造成伤害,每一只生物在一个回合内最多攻击一次。

现在Jeff的场上拥有n只生物,第i只怪物拥有ai点攻击力与bi点血量。
同时,Jeff手上有m张手牌。由于他的运气实在太差了,他的所有手牌都只有一个功能——使场上一只生物的攻击力等于它的血量。

现在正是斩杀对手的关键回合,Jeff希望他能通过一种合理的策略,对敌方造成最高的伤害。请帮助Jeff计算他能造成的最高伤害。

Input

题目包含多组测试数据。
第一行是一个整数T,表示有T组测试数据。
对于每组测试数据,第一行包含两个整数n,m(0 <= n,m <= 500),表示场上生物数量和手牌数量。
接下来的n行,每行包含两个整数ai,bi(1 <= ai,bi <= 10000000),表示第i只怪物的攻击力和血量。

Output

输出Jeff在一个回合内能对敌方造成的最高伤害。

Examples

Input
1
3 2
1 3
2 4
5 3

Output

12
Hint
对于第一组样例: Jeff可以先对场上第1只和第2只生物使用手牌,使得它们的攻击力变成3和4。 然后Jeff命令所有生物攻击,总共可以造成12点伤害。

 

正确解法:

原本就是全部加a[i],把b[i]-a[i] 排序,取出前m个在加起来,不知道为什么wa

等待正解。

 

 

B:qw的表白

Description

qw喜欢上了一个美丽的女孩,并勇敢向她表白。但女神喜欢算法厉害的男生,便给他出了一道题:
给定包含n 个整数的数列am 个询问,每个询问包含两个整数LR ,对于每一个询问,要求输出数列中有多少个数ai ,满足La2iR ,即有多少个数平方后取值范围在[L,R] 之间。
单身二十年的qw非常想谈恋爱,你能帮帮他吗? 

Input

多组数据。
第一行给出数据组数T(1T50
每组数据首先给定两个整数n ,m ,表示数列中数的个数和询问个数。(1n,m50000
随后一行给出n 个整数 a1,a2,a3...an1ai1e9
随后m 行,每行两个整数 L , R ,表示当前询问的数值范围区间。(1LR1e9

Output

对于每个询问,单独输出一行,包含一个整数,表示数列中满足条件的数个数

Examples

Input
1
5 3
1 2 3 4 5
1 4
4 9
1 25

Output

2
2
5

正确解法:

我以为1e9 long long 会超,其实不会,那么就很简单

long long 排序,二分搜索。

写了半天二分搜索,后面发现可能有一个二分函数,有点sad,但无论学了什么都要保证自己会呀。

 1 #include "pch.h"
 2 #include<iostream>
 3 #include<cstdio>
 4 #include<cmath>
 5 #include<string>
 6 #include<cstring>
 7 #include<algorithm>
 8 using namespace std;
 9 int n, m;
10 long long a[50100],l,r;
11 long long upp(int n,long long r)
12 {
13     int ll = 0, rr = n+1;
14     while (ll+1 < rr)
15     {
16         int mid = (ll + rr) / 2;
17         if (a[mid] <= r)    ll = mid;
18         else rr = mid;
19     }
20     return rr;
21 }
22 long long downn(int n, long long l)
23 {
24     int ll = 0, rr = n;
25     while (ll + 1 < rr)
26     {
27         int mid = (ll + rr) / 2;
28         if (a[mid] >= l)    rr = mid;
29         else ll = mid;
30     }
31     return ll;
32 }
33 int main()
34 {
35     int t;
36     cin >> t;
37     while (t--)
38     {
39         cin >> n >> m;
40         memset(a, 0, sizeof(a));
41         for (int i = 1; i <= n; i++)
42         {
43             cin >> a[i];
44             a[i] = a[i] * a[i];
45         }
46         sort(a + 1, a + n + 1);
47         for (int i = 1; i <= m; i++)
48         {
49             cin >> l >> r;
50             cout << upp(n, r) - downn(n, l) - 1 << endl;
51         }
52     }
53     return 0;
54 }
View Code
 1 #include "pch.h"
 2 #include<iostream>
 3 #include<cstdio>
 4 #include<cmath>
 5 #include<string>
 6 #include<cstring>
 7 #include<algorithm>
 8 using namespace std;
 9 int n, m;
10 long long a[50100],l,r;
11 long long upp(int n,long long r)
12 {
13     int ll = 0, rr = n+1;
14     while (ll+1 < rr)
15     {
16         int mid = (ll + rr) / 2;
17         if (a[mid] <= r)    ll = mid;
18         else rr = mid;
19     }
20     return rr;
21 }
22 long long downn(int n, long long l)
23 {
24     int ll = 0, rr = n;
25     while (ll + 1 < rr)
26     {
27         int mid = (ll + rr) / 2;
28         if (a[mid] >= l)    rr = mid;
29         else ll = mid;
30     }
31     return ll;
32 }
33 int main()
34 {
35     int t;
36     cin >> t;
37     while (t--)
38     {
39         cin >> n >> m;
40         memset(a, 0, sizeof(a));
41         for (int i = 1; i <= n; i++)
42         {
43             cin >> a[i];
44             a[i] = a[i] * a[i];
45         }
46         sort(a + 1, a + n + 1);
47         for (int i = 1; i <= m; i++)
48         {
49             cin >> l >> r;
50             cout << upper_bound(a+1,a+n+1,r)-lower_bound(a+1,a+n+1,l)<< endl;
51         }
52     }
53     return 0;
54 }
View Code

 

 

C:Jeff与骰子游戏

Description

骰子大家一定都玩过。
一个骰子有六个面,每个面都有一个数字。对于骰子的每一个面,你都可以通过朝一个方向翻转90度来获得另一个面。




现在你有一个骰子,一开始朝上的一面点数为1(如图上的第一个骰子所示)。
你每次都可以将它朝一个方向翻转90度,并获得相当于翻转之后的骰子朝上一面的点数的分数。比如,现在骰子朝上的一面点数为1,你可以通过翻转使它朝上的一面变成3,并获得3分。

现在给出一个目标分数s,请问你至少需要翻转几次,使得你的分数刚好等于目标分数。

Input

题目包含多组测试数据。
第一行是一个整数T,表示有T组测试数据。
对于每组测试数据,只有一个正整数s,表示你需要达到的目标分数。(1 <= s <= 10000) 

Output

对于每组测试数据,输出达到目标分数至少需要翻转几次,如果无解请输出-1。

Examples

Input
2
5
10

Output

1 2
Hint
对于第二组样例: 你可以先翻转90度,使得骰子朝上的一面变为4,并获得4分。 之后你可以再翻转90度,使得骰子朝上的一面变为6,并获得6分。 所以你至少需要2步来达到目标分数。

正确解法:

考试时觉得,每次骰子上面的数不确定,它能翻转到达的数也不确定,要一个一个判断,我觉得很麻烦,不会写,但其实只要不是它本身,和底下的数 7-i  其他的数都可以到达。

于是就成了一个裸bfs。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<string>
 5 #include<cstring>
 6 #include<algorithm>
 7 using namespace std;
 8 int n;
 9 int book[100100];
10 struct student
11 {
12     int shu, ci,daa;
13 }que[500100];
14 int bfs(int n)
15 {
16     if (n == 1)    return 0;
17     memset(book, 0, sizeof(book));
18     memset(que, 0, sizeof(que));
19     int head = 1, tail = 2;
20     que[head].shu = 1;
21     que[head].ci = 0;
22     que[head].daa = 0;
23     book[0] = 1;
24     while (head < tail)
25     {
26         if (que[head].daa == n)    return que[head].ci;
27         for (int i = 1; i <= 6; i++)
28         {
29             if (que[head].shu == i || que[head].shu == 7 - i)
30                 continue;
31             if (book[que[head].daa+i] == 0)
32             {
33                 que[tail].shu = i;
34                 que[tail].ci = que[head].ci + 1;
35                 que[tail].daa = que[head].daa + i;
36                 book[que[tail].daa] = 1;
37                 if (que[tail].daa == n)    return que[tail].ci;
38                 tail++;
39             }
40         }
41         head++;
42     }
43     return -1;
44 }
45 int main()
46 {
47     int t;
48     cin >> t;
49     while (t--)
50     {
51         cin >> n;
52         cout << bfs(n) << endl;
53     }
54     return 0;
55 }
View Code

我是傻逼,现在觉得这题都好简单。为什么写不出来!

 

D:Rabbit寻宝记(2)

Description

Rabbit成功地打开了大门后,没多久就见到了梦寐以求的宝藏。里面的宝石种类共有N 种,每一种都有一个体积v 和它的价值val 。(已知第i 种宝石的体积为i ,编号从1 ~N )更让Rabbit兴奋的是,每种宝石的数量还是无穷无尽的。
Rabbit当然想把所有宝石全都带回家,但是她带的袋子却最多只能装下总体积为V 的宝石,所以贪心的Rabbit决定要带走总体积恰好为V 的宝石。
现在她突然想知道自己在拿走宝石数量恰好为N 的情况下总价值最大为多少?

Input

输入数据第一行是一个正整数T ,表示数据组数。(T<=20 )
每组数据占两行。
第一行为两个整数NV 。(0<N<=1000N<=V<=min(NN2N) )
接下来一行有N个整数,代表N种宝石的价值vali 。(0<vali<=10000 )

Output

每组测试数据输出一行,代表在满足拿走宝石总体积恰为 V 和数量恰好为N 的情况下Rabbit能拿走宝石的最大总价值。

Examples

Input
1
3 5
6 2 4

Output

16

正确解法:

动态规划QAQ不会

二维的多重背包,就是多加一维然后从0开始
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<string>
 5 #include<cmath>
 6 #include<algorithm>
 7 #include<map>
 8 using namespace std;
 9 int n,V,w[2010],v[1010];
10 int f[2010][1010];
11 int main()
12 {
13     scanf("%d %d",&n,&V);
14     for(int i=1;i<=n;i++)
15     {
16         w[i]=i;
17         scanf("%d",&v[i]);
18     }
19     memset(f,-9999,sizeof(f));
20     f[0][0]=0;
21     for(int i=1;i<=n;i++)
22         for(int j=0;j<=V;j++)
23             for(int k=1;k<=n;k++)
24             {
25                 if(j>=w[i])
26                 f[j][k]=max(f[j][k],f[j-w[i]][k-1]+v[i]);
27             }
28     printf("%d\n",f[V][n]);
29     return 0;
30 }
View Code

(忘了多组测试2333)

 

转载于:https://www.cnblogs.com/Kaike/p/9950298.html

好的,与之前的问题类似,我们也可以使用Vue和Element UI来实现图片上传预览功能。 首先需要在页面引入Element UI的组件和样式。然后,可以创建一个上传图片的组件,使用Element UI的Upload组件来实现上传图片的功能,并使用Vue的v-for指令来循环显示已上传的图片,并提供删除功能。 下面是一个简单的示例代码: ```html <template> <div> <el-upload class="upload-demo" action="https://www.changxiang8.cn/test_api/test/aa/insert" :on-success="handleUploadSuccess" :file-list="fileList" :auto-upload="false" list-type="picture-card" :multiple="true" :before-upload="beforeUpload" > <i class="el-icon-plus"></i> </el-upload> <el-dialog :visible.sync="dialogVisible"> <img :src="dialogImageUrl" style="width: 100%"> <div slot="footer"> <el-button @click="dialogVisible = false">取 消</el-button> <el-button @click="handleRemove">删 除</el-button> </div> </el-dialog> </div> </template> <script> export default { data() { return { fileList: [], dialogVisible: false, dialogImageUrl: "", dialogIndex: 0, }; }, methods: { beforeUpload(file) { const isJPG = file.type === "image/jpeg" || file.type === "image/png"; if (!isJPG) { this.$message.error("上传图片只能是 JPG/PNG 格式!"); return false; } const isLt2M = file.size / 1024 / 1024 < 2; if (!isLt2M) { this.$message.error("上传图片大小不能超过 2MB!"); return false; } }, handleUploadSuccess(response, file, fileList) { this.fileList.push({ name: file.name, url: response.url, }); }, handlePreview(file) { this.dialogImageUrl = file.url; this.dialogVisible = true; this.dialogIndex = this.fileList.indexOf(file); }, handleRemove() { // 删除图片 const file = this.fileList[this.dialogIndex]; const url = "https://www.changxiang8.cn/test_api/test/aa/delete"; // 调用删除接口 this.$http.post(url, { url: file.url }).then((res) => { if (res.data.code === 0) { this.fileList.splice(this.dialogIndex, 1); this.dialogVisible = false; } else { this.$message.error("删除失败"); } }); }, }, }; </script> ``` 在这个组件,我们使用了Element UI的Upload组件来实现上传图片的功能,并且使用了v-for指令来循环显示已上传的图片。同时,我们还使用了Element UI的Dialog组件来实现图片预览和删除功能。 当用户上传图片时,会调用handleUploadSuccess方法来将上传成功的图片添加到fileList。当用户点击预览按钮时,会弹出一个Dialog来显示图片,并提供删除按钮来删除当前图片。当用户点击删除按钮时,会调用handleRemove方法来删除当前图片,并调用接口来删除服务器上的图片。 需要注意的是,这里的接口地址和请求方式需要根据实际情况进行修改。同时,在使用接口时需要注意安全性,防止接口被恶意调用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值