CSP-X复赛模拟一补题报告

S12175
一:
T1:【称心如意】
T2:【AC万岁】
T3:【解救达达】
T4:【整理文本】

二,比赛过程:

我恨for循环一辈子!!!TMD我好不容易作对一次,你去让我输的这么彻底!

1. 文件名(程序名和输入输出文件名)必须使用英文小写。
2. C/C++ 中函数 main() 的返回类型必须是 int,程序正常结束时的返回值必须是 0。3. 评测时采用的机器配置为:CPU 2.50GHz,内存 8G,上述时限以此配置为准。
4. 特别提醒:评测在 NOI Linux 下进行。

三比赛分解:

                                         称心如意

                                                          (satisfied.cpp/c)

1.1 问题描述
小可有一个正整数数字 ,然后想得到一个称心如意的序列 与之匹配,称心如意的序列需要满足以下几个条件:

1、序列的长度为
2、假设序列第 位取值为 ( 的范围为 到 ),那么需要满足
,并且需要满足
能整除 ,即
3、满足条件2的基础上, 的取值应该尽量小
4、若条件2不能满足,那么第 位输出一个 -。

1.2 输入格式
输入包含一个整]数 N。
1.3 输出格式
输出满足条件的序列 。

先输入n,s[10005];

在判断  n%j==0&&i%(n/j)==0  ;

赋值到s[i]后f=1并结束此程序;

后如果f==0;

赋值‘-’

输出

这题没什么好说的

但千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万千万啊千万啊不要把s定义成string类型的!!!!!!!!不然全白费!!!!!!!!!!!!!!!!!!不然俺高低40分

#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
int main(){
	//freopen("satisfied.in","r",stdin);
	//freopen("satisfied.out","w",stdout);
	int n,l,p,minn=1000,f=0;
	char s[10005];
	cin>>n;
	for(int i=0;i<=n;i++){
	    f=0;
		for(int j=1;j<=9;j++){
			if(n%j==0&&i%(n/j)==0){
				s[i]=j+'0';
				f=1;
				break;
			}
		
		}	
		if(f==0){
		    s[i]='-';
		}
	}
	for(int i=0;i<=n;i++){
		cout<<s[i];
	}
	s[n+1]='\0';
	//fclose(stdin);
	//fclose(stdout);
	return 0;
}

                                                AC万岁

                                                                       (acok.cpp/c)

2.1 问题描述
最为一个OIER,ac是我们最喜欢的。
给定一个字符串,请计算ac作为字符串子序列出现的次数
注意:字符串子序列指的是从最初字符串通过去除某些元素但不破坏余下元素的相对位置(在前或在后)而形成的新序列。例如,acf、bde、bcd都是abcdef的子序列,而cae并不是。

2.2 输入格式
输入一行,包含一个字符串 。
注意: 中仅包含小写字母。
2.3 输出格式
输出一行,表示ac的数量。

2.4 输入样例
aaaccc
2.5 输出样例
9

输入数组s;

循环长度-1次;

判断s[i]=='a',计数器++;

判断s[i]=='c',f[i]==计数器;

计数器=0;

判断s[j]是否='c';

o=o+f[j];

输出计数器;

for+if,如果s[i]==a如果s[i]==c;那就ans+=cnt,后cout<<ans;c

这题不要用嵌套for!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

我想你不会想体验输出超限然后减40分!!!!!!!!!!!!!!!!!

#include<iostream>
#include<cstdio>
#include<string>
#include<cmath>
#include<iomanip>
using namespace std;
int main(){
	//freopen("acok.in","r",stdin);
	//freopen("acok.out","w",stdout);
	int n,o=0;
	string s;
	cin>>s;
	int f[100005]={0};
	int len=s.size();
    for(int i=0;i<=len-1;i++){
		if(s[i]=='a'){
			o++;
		}
		if(s[i]=='c'){
			f[i]=o;
		}
 }
        o=0;
	for(int j=0;j<len;j++){
		if(s[j]=='c'){
			o=o+f[j];
	}
}
	cout<<o;
	//fclose(stdin);
	//fclose(stdout);
	return 0;
}

                                             解救达达

  •                                                            (rescue.cpp/c)

3.1 问题描述
达达被怪兽 1 抓走了,小可作为达达最好的朋友,要去将达达解救回来。
怪兽的名字叫做 1,是因为怪兽最喜欢的数字就是1,而最害怕的数字就是0。
怪兽每天以数字为食,而吃的数字是由二进制表示的。
现在小可知道只要有足够多的 0 混入怪兽的食物,就可以击败怪兽,救出达达。
而食物在被怪兽吃掉之前,会被检查,如果数字的二进制中有两个及以上的 0 (前导 0不算,即从第一个非0数表示二进制),怪兽不会吃掉这个数字。
小可给怪兽贡献了一个区间为 [a,b] 的数字,请计算一下这个区间内有多少个数字会伤害到怪兽

3.2 输入格式
输入一行,包含两个数字 。
3.3 输出格式
输出一个整数,表示答案。

3.4 输入样例
5 10
3.5 输出样例1
2

ll==long long;

定义全局变量a,b;

输入a,b;

定义long long 计数器;

外循环63次;

内循环0——i-2次;

定义long long s;

让s变成有0的;

看s符不符合在a和b中;

如果符合,

计数器++;

输出计数器;

用long long储后转二进制用全是1的数减去只有一个1的数

#include<iostream>
#include<cstdio>
#define ll long long
using namespace std;
ll a,b;
int main(){
	//freopen("rescue.in","r",stdin);
	//freopen("rescue.out","w",stdout);
	cin>>a>>b;
	long long cnt=0;
	for(int i=1;i<=63;i++){
		for(int j=0;j<=i-2;j++){
			long long s=(1ll<<i)-1-(1ll<<j);
			if(s>=a&&s<=b){
				cnt++;
			}
		}
	}
	cout<<cnt;
	//fclose(stdin);
	//fclose(stdout);
	return 0;
}

  baba

                                             整理文本

                                                                    (text.cpp/c)

4.1 问题描述
小可获得了一个新的任务,需要整理一份文本。
为了使得文本可以在一页之内就打印成功,小可必须使得文本整理在 行之内。
小可数出了文本中总共有 个单词,并且小可记录出来了每个单词的长度 。
整理出来的文本必须要满足行首为当前行的第一个单词,相邻的两个单词需至少由一个空格间隔。
当所有文本按照要求整理结束之后,得到每一行的行宽(当前行中单词的 加 空格数
量),请使得其中最大的行宽最小,请输出对应的行宽值。
注意:单词不能调换顺序,并且单词不能舍弃一部分。
4.2 输入格式
输入第一行,包含两个整数 ,分别表示单词数量和行数要求。
输入第二行,包含 个数字,表示每个单词的长度。
4.3 输出格式
输出一行,包含一个整数表示答案。
4.4 输入样例1
4.5 输出样例1
13 3
9 5 2 7 1 8 8 2 1 5 2 3 6
26

定义全局变量数组a[200005];

定义bool类型自定义函数check;{

定义 计数器cnt赋值下1;

long long 累加器sum赋值-1;

循环n次;

判断sum+a[i]+1<=mid;

后sum+=a[i]+1;

否则cnt++;sum=a[i]

返回cnt<=m;

}

主函数{

定义long long类型变量l,r,单词数:n,行数m,最大值max=999(赋值),最小值min=-999(赋值)

输入n,m;

定义 计数器cnt赋值下1;

long long 累加器sum赋值-1;

循环n次,输入数组a[i];{

判断a[i]是否小于max{

如果小于,max=a[i]

}

sum=sum+a[i];

}

l=max;

r=sum;

循环到  l>r;

mid=(l+r)>>1;

判断(把min,m,n传到check){

r=mid;

}

否则{

l=mid+1;

}

输出r;

#include<iostream>
#include<cstdio>
#include<string>
#include<cmath>
#include<iomanip>
using namespace std;
int a[200005];
bool check(long long mid,int m,int n){
	int cnt=1;
	long long sum=-1;
	for(int i=1;i<=n;i++){
		if(sum+a[i]+1<=mid){
			sum+=a[i]+1;
		}
		else{
			cnt++;
			sum=a[i];
		}
	}
	return cnt<=m;
}
int main(){
	//freopen("text.in","r",stdin);
	//freopen("text.out","w",stdout);
	long long l,m,n,r,mid=9999,max=-9999;
	cin>>n>>m;
	int cnt=1;
	long long sum=-1;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		if(a[i]>max){
			max=a[i];
		}
		sum=sum+a[i];
	}
	l=max;
	r=sum;
	while(l<r){
		mid=(l+r)>>1;
		if(check(mid,m,n)){
			r =mid;
		}
		else{
			l=mid+1;
		}
	}
	cout<<r;
	//fclose(stdin);
	//fclose(stdout);
	return 0;
}

啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊不活了!!!!!!!!!!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值