CSPJ2020A真题大全 优秀的拆分,直播获奖,表达式,方格取数

news2024/12/25 8:58:43

CSPJ2020A. 优秀的拆分 (Excellent Split)

题目描述

一般来说,一个正整数可以拆分成若干个正整数的和。

例如,1=11=11=110=1+2+3+410=1+2+3+410=1+2+3+4 等。对于正整数 nnn 的一种特定拆分,我们称它为“优秀的”,当且仅当在这种拆分下,nnn 被分解为了若干个不同的 222 的正整数次幂。注意,一个数 xxx 能被表示成 222 的正整数次幂,当且仅当 xxx 能通过正整数个 222 相乘在一起得到。

例如,10=8+2=23+2110=8+2=2^3+2^110=8+2=23+21 是一个优秀的拆分。但是,7=4+2+1=22+21+207=4+2+1=2^2+2^1+2^07=4+2+1=22+21+20 就不是一个优秀的拆分,因为 111 不是 222 的正整数次幂。

现在,给定正整数 nnn,你需要判断这个数的所有拆分中,是否存在优秀的拆分。若存在,请你给出具体的拆分方案。

输入格式

输入只有一行,一个整数 nnn,代表需要判断的数。

输出格式

如果这个数的所有拆分中,存在优秀的拆分。那么,你需要从大到小输出这个拆分中的每一个数,相邻两个数之间用一个空格隔开。可以证明,在规定了拆分数字的顺序后,该拆分方案是唯一的。

若不存在优秀的拆分,输出 -1

输入数据 1

6 
Copy

输出数据 1

4 2
Copy

输入数据 2

7 
Copy

输出数据 2

-1
Copy

数据范围与提示

对于 20%20\%20% 的数据,n≤10n \le 10n10

对于另外 20%20\%20% 的数据,保证 nnn 为奇数。

对于另外 20%20\%20% 的数据,保证 nnn222 的正整数次幂。

对于 80%80\%80% 的数据,n≤1024n \le 1024n1024

对于 100%100\%100% 的数据,1≤n≤1071 \le n \le {10}^71n107

#include<bits/stdc++.h>
using namespace std;
long long q,w,e,r,t,y,u,i,o,p,s,d,f,g,h,j,k,l,m,n,v,x,z,kk;
int b[1000];
int a[1000];
int c[1000];
int main()
{
	cin>>n;
	if(n%2==1)
	{
		cout<<"-1";
		return 0;
	}
	i=1;x=2;
	while(n!=0)
	{
		if(x*2<=n)
		x*=2;
		if(x*2>n)
		{
			n-=x;
			cout<<x<<" ";
			x=2;
		}
		i++;
	}
	return 0;
}

CSPJ2020B. 直播获奖 (Live Awards Ceremony)

题目描述

NOI2130 即将举行。为了增加观赏性,CCF 决定逐一评出每个选手的成绩,并直播即时的获奖分数线。本次竞赛的获奖率为 w%w\%w%,即当前排名前 w%w\%w% 的选手的最低成绩就是即时的分数线。

更具体地,若当前已评出了 ppp 个选手的成绩,则当前计划获奖人数为 max⁡(1,⌊p∗w%⌋)\max(1, \lfloor p * w \%\rfloor)max(1,pw%⌋),其中 www 是获奖百分比,⌊x⌋\lfloor x \rfloorx 表示对 xxx 向下取整,max⁡(x,y)\max(x,y)max(x,y) 表示 xxxyyy 中较大的数。如有选手成绩相同,则所有成绩并列的选手都能获奖,因此实际获奖人数可能比计划中多。

作为评测组的技术人员,请你帮 CCF 写一个直播程序。

输入格式

第一行有两个整数 n,wn, wn,w。分别代表选手总数与获奖率。 第二行有 nnn 个整数,依次代表逐一评出的选手成绩。

输出格式

只有一行,包含 nnn 个非负整数,依次代表选手成绩逐一评出后,即时的获奖分数线。相邻两个整数间用一个空格分隔。

输入数据 1

10 60
200 300 400 500 600 600 0 300 200 100
Copy

输出数据 1

200 300 400 400 400 500 400 400 300 300
Copy

输入数据 2

10 30
100 100 600 100 100 100 100 100 100 100
Copy

输出数据 2

100 100 600 600 600 600 100 100 100 100
Copy

样例 1 解释

样例 1 解释

数据范围与提示

各测试点的 nnn 如下表:

测试点编号n=
1∼31 \sim 313101010
4∼64 \sim 646500500500
7∼107 \sim 10710200020002000
11∼1711 \sim 17111710410^4104
18∼2018 \sim 20182010510^5105

对于所有测试点,每个选手的成绩均为不超过 600600600 的非负整数,获奖百分比 www 是一个正整数且 1≤w≤991 \le w \le 991w99

在计算计划获奖人数时,如用浮点类型的变量(如 C/C++ 中的 float 、 double,Pascal 中的 real 、 double 、 extended 等)存储获奖比例 w%w\%w%,则计算 5×60%5 \times 60\%5×60% 时的结果可能为 3.0000013.0000013.000001,也可能为 2.9999992.9999992.999999,向下取整后的结果不确定。因此,建议仅使用整型变量,以计算出准确值。

#include<bits/stdc++.h>
using namespace  std;
const int mx=610;
int c[mx];//x分的人有多少个
int n,w,ans,cnt,x,i;

int  main()
{
	for(int i=0; i<=600; i++) c[i]=0;
	cin>>n>>w;
	for (int i=1; i<=n; i++)
		{
			cin>>x;
			c[x]++;
			cnt=floor(i*w/100);
			cnt=max(cnt,1);
			ans=600;
			int s=c[ans];
			while (s<cnt)
				{
					ans--;
					s+=c[ans];
				}
			cout<<ans<<' ';
		}
	return 0;
}

CSPJ2020C. 表达式 (Expression)

题目描述

小 C 热衷于学习数理逻辑。有一天,他发现了一种特别的逻辑表达式。在这种逻辑表达式中,所有操作数都是变量,且它们的取值只能为 000111,运算从左往右进行。如果表达式中有括号,则先计算括号内的子表达式的值。特别的,这种表达式有且仅有以下几种运算:

  1. 与运算:a & b。当且仅当 aaabbb 的值都为 111 时,该表达式的值为 111。其余情况该表达式的值为 000
  2. 或运算:a | b。当且仅当 aaabbb 的值都为 000 时,该表达式的值为 000。其余情况该表达式的值为 111
  3. 取反运算:!a。当且仅当 aaa 的值为 000 时,该表达式的值为 111。其余情况该表达式的值为 000

小 C 想知道,给定一个逻辑表达式和其中每一个操作数的初始取值后,再取反某一个操作数的值时,原表达式的值为多少。

为了化简对表达式的处理,我们有如下约定:

表达式将采用后缀表达式的方式输入。

后缀表达式的定义如下:

  1. 如果 EEE 是一个操作数,则 EEE 的后缀表达式是它本身。
  2. 如果 EEEE1 op E2E_1~\texttt{op}~E_2E1 op E2 形式的表达式,其中 op\texttt{op}op 是任何二元操作符,且优先级不高于 E1E_1E1E2E_2E2 中括号外的操作符,则 EEE 的后缀式为 E1′E2′opE_1' E_2' \texttt{op}E1E2op,其中 E1′E_1'E1E2′E_2'E2 分别为 E1E_1E1E2E_2E2 的后缀式。
  3. 如果 EEEE1E_1E1 形式的表达式,则 E1E_1E1 的后缀式就是 EEE 的后缀式。

同时为了方便,输入中:

与运算符(&)、或运算符(|)、取反运算符(!)的左右均有一个空格,但表达式末尾没有空格。

操作数由小写字母 x 与一个正整数拼接而成,正整数表示这个变量的下标。例如:x10,表示下标为 10 的变量 x10x_{10}x10 。数据保证每个变量在表达式中出现恰好一次。

输入格式

第一行包含一个字符串 sss,表示上文描述的表达式。

第二行包含一个正整数 nnn,表示表达式中变量的数量。表达式中变量的下标为 1,2,⋯ ,n1,2, \cdots , n1,2,,n

第三行包含 nnn 个整数,第 iii 个整数表示变量 xix_ixi 的初值。

第四行包含一个正整数 qqq,表示询问的个数。

接下来 qqq 行,每行一个正整数,表示需要取反的变量的下标。注意,每一个询问的修改都是临时的,即之前询问中的修改不会对后续的询问造成影响。

数据保证输入的表达式合法。变量的初值为 000111

输出格式

输出一共有 qqq 行,每行一个 000111,表示该询问下表达式的值。

输入数据 1

x1 x2 & x3 |
3
1 0 1
3
1
2
3
Copy

输出数据 1

1
1
0
Copy

输入数据 2

x1 ! x2 x4 | x3 x5 ! & & ! &
5
0 1 0 1 1
3
1
3
5
Copy

输出数据 2

0
1
1
Copy

样例 1 解释

该后缀表达式的中缀表达式形式为 (x1&x2)∣x3(x_1 \& x_2) | x_3(x1&x2)x3

对于第一次询问,将 x1x_1x1 的值取反。此时,三个操作数对应的赋值依次为 000000111。原表达式的值为 (0&0)∣1=1(0\&0)|1=1(0&0)∣1=1

对于第二次询问,将 x2x_2x2 的值取反。此时,三个操作数对应的赋值依次为 111111111。原表达式的值为 (1&1)∣1=1(1\&1)|1=1(1&1)∣1=1

对于第三次询问,将 x3x_3x3 的值取反。此时,三个操作数对应的赋值依次为 111000000。原表达式的值为 (1&0)∣0=0(1\&0)|0=0(1&0)∣0=0

样例 2 解释

该表达式的中缀表达式形式为 (!x1)&(!((x2∣x4)&(x3&(!x5))))(!x_1)\&(!((x_2|x_4)\&(x_3\&(!x_5))))(!x1)&(!((x2x4)&(x3&(!x5))))

数据范围与提示

对于 20%20\%20% 的数据,表达式中有且仅有与运算(&)或者或运算(|)。

对于另外 30%30\%30% 的数据,∣s∣≤1000|s| \le 1000s1000q≤1000q \le 1000q1000n≤1000n \le 1000n1000

对于另外 20%20\%20% 的数据,变量的初值全为 000 或全为 111

对于 100%100\%100% 的数据,1≤∣s∣≤1×1061 \le |s| \le 1 \times 10^61s1×1061≤q≤1×1051 \le q \le 1 \times 10^51q1×1052≤n≤1×1052 \le n \le 1 \times 10^52n1×105

其中,∣s∣|s|s 表示字符串 sss 的长度。

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int INF = 0x3f3f3f3f;
const LL mod = 1e9 + 7;
const int N = 1000005;

char s[N];
int a[N];
int son[N][2], ck;
int flag[N], c[N];
int n, q;
int dfs(int u, int g) {
    a[u] ^= g;
    if (u <= n) {
        return a[u];
    }
    int x = dfs(son[u][0], g ^ flag[son[u][0]]);
    int y = dfs(son[u][1], g ^ flag[son[u][1]]);
    if (a[u] == 2) {
        if (x == 0) c[son[u][1]] = 1;
        if (y == 0) c[son[u][0]] = 1;
        return x & y;
    } else {
        if (x == 1) c[son[u][1]] = 1;
        if (y == 1) c[son[u][0]] = 1;
        return x | y;
    }
}
void dfs2(int u) {
    if (u <= n) return;
    c[son[u][0]] |= c[u];
    c[son[u][1]] |= c[u];
    dfs2(son[u][0]);
    dfs2(son[u][1]);
}
int main() {
    // freopen("expr.in", "r", stdin);
    // freopen("expr.out", "w", stdout);
    gets(s);
    scanf("%d", &n);
    ck = n;
    for (int i = 1; i <= n; i++) {
        scanf("%d", &a[i]);
    }
    stack<int> b;
    for (int i = 0; s[i]; i += 2) {
        if (s[i] == 'x') {
            int x = 0;
            i++;
            while (s[i] != ' ') {
                x = x * 10 + s[i] - '0';
                i++;
            }
            i--;
            b.push(x);
        } else if (s[i] == '&') {
            int x = b.top();
            b.pop();
            int y = b.top();
            b.pop();
            b.push(++ck);
            a[ck] = 2;
            son[ck][0] = x;
            son[ck][1] = y;
        } else if (s[i] == '|') {
            int x = b.top();
            b.pop();
            int y = b.top();
            b.pop();
            b.push(++ck);
            a[ck] = 3;
            son[ck][0] = x;
            son[ck][1] = y;
        } else if(s[i] == '!'){
            flag[b.top()] ^= 1;
        }
    }
    int ans = dfs(ck, flag[ck]);
    dfs2(ck);
    scanf("%d", &q);
    while (q--) {
        int x;
        scanf("%d", &x);
        printf("%d\n", c[x] ? ans : !ans);
    }
    return 0;
}

CSPJ2020D. 方格取数 (Grid Numbers Picking)

题目描述

设有 n×mn \times mn×m 的方格图,每个方格中都有一个整数。现有一只小熊,想从图的左上角走到右下角,每一步只能向上、向下或向右走一格,并且不能重复经过已经走过的方格,也不能走出边界。小熊会取走所有经过的方格中的整数,求它能取到的整数之和的最大值。

输入格式

第一行有两个整数 n,mn, mn,m

接下来 nnn 行每行 mmm 个整数,依次代表每个方格中的整数。

输出格式

一个整数,表示小熊能取到的整数之和的最大值。

输入数据 1

3 4
1 -1 3 2
2 -1 4 -1
-2 2 -3 -1
Copy

输出数据 1

9
Copy

输入数据 2

2 5
-1 -1 -3 -2 -7
-2 -1 -4 -1 -2
Copy

输出数据 2

-10
Copy

样例 1 解释

样例 1 解释

样例 2 解释

样例 2 解释

数据范围与提示

对于 20%20\%20% 的数据,n,m≤5n, m \le 5n,m5

对于 40%40\%40% 的数据,n,m≤50n, m \le 50n,m50

对于 70%70\%70% 的数据,n,m≤300n, m \le 300n,m300

对于 100%100\%100% 的数据,1≤n,m≤1031 \le n,m \le 10^31n,m103

方格中整数的绝对值不超过 10410^4104

#include <stdio.h>
typedef long long LL;
const LL min_ll = -1e18;
int n, m; LL w[1005][1005], f[1005][1005][2];
inline LL mx(LL p, LL q, LL r) {return p > q ? (p > r ? p : r) : (q > r ? q : r);}
inline LL dfs(int x, int y, int from) {
    if (x < 1 || x > n || y < 1 || y > m) return min_ll;
    if (f[x][y][from] != min_ll) return f[x][y][from];
    if (from == 0) f[x][y][from] = mx(dfs(x + 1, y, 0), dfs(x, y - 1, 0), dfs(x, y - 1, 1)) + w[x][y];
    else f[x][y][from] = mx(dfs(x - 1, y, 1), dfs(x, y - 1, 0), dfs(x, y - 1, 1)) + w[x][y];
    return f[x][y][from];
}
int main(void) {
//	freopen("number.in", "r", stdin); freopen("number.out", "w", stdout);
	scanf("%d %d", &n, &m);
	for (int i = 1; i <= n; ++i)
		for (int j = 1; j <= m; ++j) {
			scanf("%lld", &w[i][j]);
			f[i][j][0] = f[i][j][1] = min_ll;
		}
    f[1][1][0] = f[1][1][1] = w[1][1];
	printf("%lld\n", dfs(n, m, 1));
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/913991.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux中互斥锁,自旋锁,条件变量,信号量,与freeRTOS中的消息队列,信号量,互斥量,事件的区别

RTOS 对于目前主流的RTOS的任务&#xff0c;大部分都属于并发的线程。 因为MCU上的资源每个任务都是共享的&#xff0c;可以认为是单进程多线程模型。 【freertos】003-任务基础知识 在没有操作系统的时候两个应用程序进行消息传递一般使用全局变量的方式&#xff0c;但是如…

高等数学之微分中值定理,柯西中值定理,拉格朗日中值定理,罗尔定理

高等数学之微分中值定理 极值点处的导数为0 但不能反推 驻点&#xff1a;导数为0的点 翻译&#xff1a;一笔画&#xff0c;光滑&#xff0c;两端相等 看图即可 这个推导由于不一点是同一点&#xff0c;不能证明

函数式编程-Stream流学习第一节

1 为什么学习 1.现在很多公司在编程中大量使用函数式编程-Stream流格式代码&#xff0c;所以为了能够看懂公司的代码 2.大量数据下处理集合效率高--因为有并行流 3.代码可读性高 4.消灭嵌套地狱 2 函数式编程思想 2.1 概念 面向对象编程是关注于用对象完成什么事情。而函数式…

Linux 进程间通信(IPC)

文章目录 进程间通信介绍进程间通信的概念进程间通信的目的进程间通信的本质理解进程间通信分类 管道匿名管道匿名管道的原理 pipe函数管道的特点 命名管道命名管道的原理使用相关命令创建命名管道使用命名管道实现server端和client端通信 system V共享内存共享内存通信的基本原…

Linux: scp 使用 Permission denied 错误解决

scp: /system.img Permission denied权限被拒绝&#xff0c;换一个目录执行&#xff0c;或者给这个目录添加权限 chmod 777 从本地复制到远程 scp local_file remote_usernameremote_ip:remote_file scp local_file remote_ip:remote_file 从远程复制到本地 scp rootwww.run.…

3D WEB轻量化引擎HOOPS产品助力NAPA打造船舶设计软件平台

NAPA&#xff08;Naval Architectural PAckage&#xff0c;船舶建筑包&#xff09;&#xff0c;来自芬兰的船舶设计软件供应商&#xff0c;致力于提供世界领先的船舶设计、安全及运营的解决方案和数据分析服务。NAPA拥有超过30年的船舶设计经验&#xff0c;年营业额超过2560万欧…

罗勇军 →《算法竞赛·快冲300题》每日一题:“小球配对” ← 并查集

【题目来源】http://oj.ecustacm.cn/problem.php?id1850http://oj.ecustacm.cn/viewnews.php?id1023【题目描述】 给定 n 个小球&#xff0c;编号为 1-n&#xff0c;给定 m 个篮子&#xff0c;编号为 1-m。 每个球只允许放入样例给定的编号为 Ai 或者 Bi 的两个篮子中的 1 个…

从不均匀性角度浅析AB实验

本篇的目的是从三个不均匀性的角度,对AB实验进行一个认知的普及,最终着重讲述AB实验的一个普遍的问题&#xff0c;即实验准确度问题。 一、AB实验场景 在首页中&#xff0c;我们是用红色基调还是绿色基调&#xff0c;是采用门店小列表外商品feed&#xff08;左图&#xff09;…

【jstat命令】查看jvm内存占用和GC情况

以下两个常用命令 第一个命令&#xff1a;用作查看内存占用和GC情况&#xff08;当前老年代内存空间、老年代使用空间…&#xff09;&#xff1b; 第二个命令&#xff1a;用作查看内存分配情况&#xff08;老年代最小内存空间、老年代最大内存空间…&#xff09;。 1、当前内存…

excel文本函数篇3

replace的替换&#xff0c;是通过指定位置做替换&#xff0c;只能替换一个&#xff0c;跟python中的不一样&#xff0c;python中是通过字串替换。那么怎么实现全部替换呢&#xff1f; ----> substitute函数 &#xff08;1&#xff09;后缀没有B&#xff1a;一个字节代表一个…

补充1 MATLAB_GUI_通过普通按钮PushButton的回调函数ButtonDownFcn创建一个长按回调按钮

目录 一、实例效果二、补充的知识点&#xff08;两种回调函数&#xff09;三、步骤  1. 先建一个空白的GUI。  2.在GUI Figure 上添加一个按钮&#xff08;PushButton&#xff09;组件&#xff0c;并设置其属性&#xff0c;例如位置、大小和文本等。  3.CtrS保存一下GUI。…

回流焊炉温曲线图讲解

从下面回流焊炉温曲线标准图分析回流焊的原理&#xff1a; 当PCB进入升温区&#xff08;干燥区&#xff09;时&#xff0c;焊锡膏中的溶剂、气体蒸发掉&#xff0c;同时焊锡膏中的助焊剂润湿焊盘、元器件端头和引脚&#xff0c;焊锡膏软化、塌落、覆盖了焊盘&#xff0c;将焊盘…

vue 项目在编译时,总是出现系统崩的状态,报错信息中有v7 或者 v8 的样式-项目太大内存溢出

vue 项目在编译时&#xff0c;总是出现系统崩的状态&#xff0c;node 命令框也会报错&#xff0c;如下图&#xff1a;有v7 或者 v8 的样式。 原因分析&#xff1a; 分析&#xff1a;遇到与上面图片相似的问题&#xff0c;我们要首先要想到是否是 有关内存的问题&#xff0c;当然…

2023年科技趋势展望报告,这几个领域程序员可以恰饭

太空电梯、MOSS、ChatGPT等&#xff0c;都预兆着2023年注定不会是平凡的一年。那么在2023年&#xff0c;科技领域都有哪些发展趋势呢&#xff1f; 麦肯锡发布了最新的《2023科技趋势展望报告》&#xff0c;从通用人工智能到未来生物工程&#xff0c;总结了备受关注的15种科技趋…

【Unity细节】Unity制作汽车时,为什么汽车会被弹飞?为什么汽车会一直抖动?

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 秩沅 原创 &#x1f636;‍&#x1f32b;️收录于专栏&#xff1a;unity细节和bug &#x1f636;‍&#x1f32b;️优质专栏 ⭐【…

8.注册中心-nacos

1.Nacos 之前有用过spring cloud的eureka注册中心&#xff0c;配置起来稍微繁琐&#xff1b;nacos是阿里开发的一款注册中心&#xff0c;操作就简单多了 1.1 Nacos 下载 Nacos 快速开始这个快速开始手册是帮忙您快速在您的电脑上&#xff0c;下载、安装并使用 Nacos。https:/…

独立站推广方式盘点,轻松赢得流量和收益!

独立站不受平台限制&#xff0c;不用给平台佣金&#xff0c;好是很好&#xff0c;但它的问题在于它完全没有自然流量。想要做独立站&#xff0c;就必须做推广。独立站推广怎么做&#xff1f;看这篇准没错&#xff01; 01.SEO搜索引擎优化 搜索引擎优化&#xff08;SEO&#x…

nlp系列(7)三元组识别(Bi-LSTM+CRF)pytorch

模型介绍 在实体识别中&#xff1a;使用了Bert模型&#xff0c;CRF模型 在关系识别中&#xff1a;使用了Bert模型的输出与实体掩码&#xff0c;进行一系列变化&#xff0c;得到关系 Bert模型介绍可以查看这篇文章&#xff1a;nlp系列&#xff08;2&#xff09;文本分类&…

摄影预约小程序开发全攻略

当今社会&#xff0c;移动互联网的普及使得手机APP和小程序成为了各行各业的必备工具。在摄影行业&#xff0c;如何让客户更加方便地预约摄影服务&#xff0c;提高工作效率&#xff0c;成为了摄影店主们亟需解决的问题。而定制一款适合自己摄影店的小程序&#xff0c;将成为一种…

【IT运维知识】暴力破解和防暴力破解定义说明

很多刚入行的小伙伴对于暴力破解相关知识不是很了解&#xff0c;今天我们就来简单聊聊。 暴力破解 暴力破解是指采用反复试错的方法并希望最终猜对&#xff0c;以尝试破解密码或用户名或找到隐藏的网页&#xff0c;或者找到用于加密消息的密钥。这是一种较老的攻击方法&#x…