CCF模拟题-201909
2.小明种苹果(续)(100分)
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 1010
using namespace std;
int n,op,x,m,a[maxn];
long long sum;
bool vis[maxn];
int main(){
//freopen("Cola.txt","r",stdin);
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d",&m);
int ansnow;
scanf("%d",&ansnow);
a[i]=ansnow;
for(int j=;j<m;j++){
scanf("%d",&x);
if(x>){
if(x!=a[i])vis[i]++;
a[i]=x;
}
else a[i]+=x,ansnow=a[i];
}
sum+=a[i];
}
printf("%lld ",sum);
sum=;
for(int i=;i<=n;i++)sum+=vis[i];
printf("%lld ",sum);
sum=;
for(int i=;i<=n-;i++){
if(vis[i]&&vis[i-]&&vis[i+])sum++;
}
if(n>=){
if(vis[]&&vis[]&&vis[n])sum++;
if(vis[n]&&vis[n-]&&vis[])sum++;
}
printf("%lld\n",sum);
return ;
}
3.字符画(0分)
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,m,len[][],color[][][],num,p,q;
char colors[][][][];
char s[][][];
int change(char c1,char c2){
int a=,b=;
if(c1>=''&&c1<='')a=c1-'';
else a=c1-'A'+;
if(c2>=''&&c2<='')b=c2-'';
else b=c2-'A'+;
return a*+b;
}
bool check1(int i,int j){
if(i==&&j==)return ;
int prei=i,prej=j;
if(j==){
prei--;
prej=m-q+;
}
else prej--;
for(int k=;k<=;k++){
if(color[i][j][k]!=color[prei][prej][k])return ;
}
return ;
}
void solve(){
for(int i=;i<=n;i+=p){
for(int j=;j<=m;j+=q){
if(check1(i,j)){//是否新建色块
if(i!=||j!=){//将之前的修改屏蔽
printf("\\x1B\\x5B\\x30\\x6D");//ESC[0m
}
printf("\\x1B\\x5B\\x34\\x38\\x3B\\x32");// ------------------------ESC[48;2
for(int k=;k<=;k++){
printf("\\x3B");// ------------------------;R;B;G
// printf("%s",colors[i][j][k]);//;R;B;G
if(colors[i][j][k][]!=''){
int x=colors[i][j][k][];
if(x>=&&x<=){//这一位数为0~9
printf("\\x%d",+x-'');
}
else {
printf("\\x%d",+x-'A');//这一位数为A~F
}
}
int x=colors[i][j][k][];
if(x>=&&x<=){//这一位数为0~9
printf("\\x%d",+x-'');
}
else {
printf("\\x%d",+x-'A');//这一位数为A~F
}
}
printf("\\x6D");// -------------------------m
}
printf("\\x20");// -------------------------当前色块对应的空格
if(i==n-p+&&j==m-q+){
printf("\\x1B\\x5B\\x30\\x6D");//ESC[0m
}
if(j==m-q+){//行末
printf("\\x0A");//回车
}
}
}
}
void change_to_char(int i,int j,int k,int x){
/*colors[i][j][k][0]='\\';
colors[i][j][k][1]='x';
int a=x%16,b=x/16;
if(b<=9)colors[i][j][k][2]=b+'0';
else if(b>=10)colors[i][j][k][2]=b-10+'A';
if(a<=9)colors[i][j][k][3]=a+'0';
else if(a>=10)colors[i][j][k][3]=a-10+'A';*/
int a_num=x%,b_num=x/;
char a_s,b_s;
if(a_num<=)a_s=a_num+'';
else if(a_num>=)a_s=a_num-+'A';
if(b_num<=)b_s=b_num+'';
else if(b_num>=)b_s=b_num-+'A';
colors[i][j][k][]=b_s;
colors[i][j][k][]=a_s;
}
int main(){
freopen("Cola.txt","r",stdin);
/*printf("\033[38;2;255;0;0mHello\033[0m \033[38;2;0;0;255m\033[48;2;255;255mWorld\033[0m\n");*/
scanf("%d%d",&m,&n);
scanf("%d%d",&q,&p);num=p*q;//num为每个色块内的颜色个数,p行q列
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
scanf("%s",s[i][j]+);
len[i][j]=strlen(s[i][j]+);
}
} for(int i=;i<=+(n/p-)*p;i+=p){
for(int j=;j<=+(m/q-)*q;j+=q){
int a=,b=,c=;
for(int x=i;x<=i+p-;x++){
for(int y=j;y<=j+q-;y++){
if(len[x][y]==){//对应#abc的情况
a+=change(s[x][y][],s[x][y][]);
b+=change(s[x][y][],s[x][y][]);
c+=change(s[x][y][],s[x][y][]);
}
else if(len[x][y]==){//对应#a的情况
a+=change(s[x][y][],s[x][y][]);
b+=change(s[x][y][],s[x][y][]);
c+=change(s[x][y][],s[x][y][]);
}
else{
a+=change(s[x][y][],s[x][y][]);
b+=change(s[x][y][],s[x][y][]);
c+=change(s[x][y][],s[x][y][]);
}
}
}
color[i][j][]=a/num;
color[i][j][]=b/num;
color[i][j][]=c/num;
}
}
for(int i=;i<=n;i+=p){
for(int j=;j<=m;j+=q){
for(int k=;k<=;k++)
change_to_char(i,j,k,color[i][j][k]);
// printf("(%d,%d,%d) ",color[i][j][1],color[i][j][2],color[i][j][3]);
}
// puts("");
}
/*for(int i=1;i<=n;i+=p){
for(int j=1;j<=m;j+=q){
printf("(%d,%d,%d) ",color[i][j][1],color[i][j][2],color[i][j][3]);
}
puts("");
}*/
solve();
}
/*
2 2
1 1
#010203
#2B675A
#234
#2
*/
4.推荐系统(20分)
/*
离线操作,把编号离散化
用mark标记某类的某个编号的东西还是否存在,来完成添加和删除功能
*/
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,m,num,op_num,mx,idx[],cnt,tmp[][];
struct node{
int type,sc,id;
}a[];
struct Operator{
int op,type,id,sc;
int k[];
}ope[];
int f(int x){//从大数映射到小数
return lower_bound(idx+,idx+cnt+,x)-idx;
}
bool mark[][];
bool cmp(node x,node y){
if(x.sc!=y.sc)return x.sc>y.sc;
else if(x.type!=y.type)return x.type<y.type;
else return x.id<y.id;
}
int main(){
freopen("Cola.txt","r",stdin);
scanf("%d%d",&m,&n);
int id,sc;
for(int i=;i<=n;i++){
scanf("%d%d",&id,&sc);
idx[++cnt]=id;
for(int j=;j<=m;j++){
num++;
a[num].type=j;
a[num].sc=sc;
a[num].id=id;
}
}
scanf("%d",&op_num);
for(int i=;i<=op_num;i++){
scanf("%d",&ope[i].op);
if(ope[i].op==){
scanf("%d%d%d",&ope[i].type,&ope[i].id,&ope[i].sc);
idx[++cnt]=ope[i].id;
mx=max(mx,ope[i].id);
ope[i].type++;
}
else if(ope[i].op==){
scanf("%d%d",&ope[i].type,&ope[i].id);
idx[++cnt]=ope[i].id;
mx=max(mx,ope[i].id);
ope[i].type++;
}
else{
scanf("%d",&ope[i].k[]);
for(int j=;j<=m;j++)scanf("%d",&ope[i].k[j]);
}
}
sort(idx+,idx+cnt+);
cnt=unique(idx+,idx+cnt+)-idx-;
for(int i=;i<=num;i++){
a[i].id=f(a[i].id);
mark[a[i].type][a[i].id]=;
} for(int i=;i<=op_num;i++){
// for(int i=1;i<=7;i++){for(int j=1;j<=2;j++){cout<<mark[j][i]<<' ';}cout<<endl;}cout<<endl;
if(ope[i].op==){
num++;
a[num].type=ope[i].type;
a[num].id=f(ope[i].id);
a[num].sc=ope[i].sc;
mark[a[num].type][a[num].id]=;
}
else if(ope[i].op==){
mark[ope[i].type][f(ope[i].id)]=;
}
else{
for(int j=;j<=m;j++)tmp[j][]=;
sort(a+,a+num+,cmp);
int count=;
for(int j=;j<=num;j++){
if(!mark[a[j].type][a[j].id])continue;
else if(tmp[a[j].type][]>=ope[i].k[a[j].type])continue;
else {
tmp[a[j].type][++tmp[a[j].type][]]=idx[a[j].id];
count++;
if(count>=ope[i].k[])break;
}
}
for(int j=;j<=m;j++){
if(tmp[j][]==){
puts("-1");
continue;
}
else {
for(int k=;k<=tmp[j][];k++)
printf("%d ",tmp[j][k]);
puts("");
}
}
}
}
return ;
}
5.城市规划(20分)
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#define maxn 50010
using namespace std;
int n,m,K,a[],head[maxn],num;
struct node{
int to,pre,v;
}e[];
void Insert(int from,int to,int v){
e[++num].to=to;
e[num].v=v;
e[num].pre=head[from];
head[from]=num;
}
int dis[],d[][];
queue<int>q;
bool vis[maxn];
void bfs(int s){
q.push(s);
memset(dis,0x7f,sizeof(dis));
memset(vis,,sizeof(vis));
dis[s]=;
vis[s]=;
while(!q.empty()){
int now=q.front();q.pop();
for(int i=head[now];i;i=e[i].pre){
int to=e[i].to;
if(vis[to])continue;
vis[to]=;
dis[to]=min(dis[to],dis[now]+e[i].v);
q.push(to);
}
}
}
void solve1(){
if(K<=){
puts("");
return;
}
int ans=0x7fffffff;
for(int i=;i<=m;i++){
bfs(a[i]);
for(int j=i+;j<=m;j++)
ans=min(ans,dis[a[j]]);
}
printf("%d\n",ans);
}
void solve2(){
for(int i=;i<=m;i++){
bfs(a[i]);
for(int j=;j<=m;j++)
d[i][j]=dis[a[j]];
}
int ans=0x7fffffff,ans_now=;
for(int sta=;sta<(<<m);sta++){
int sum=;
for(int i=;i<=m;i++)
if(sta&(<<i-))sum++;
if(sum!=K)continue;
ans_now=;
for(int i=;i<=m;i++){
if(!(sta&(<<i-)))continue;
for(int j=i;j<=m;j++){
if(!(sta&(<<j-)))continue;
ans_now+=d[i][j];
}
}
ans=min(ans,ans_now);
}
printf("%d\n",ans);
return ;
}
int main(){
freopen("Cola.txt","r",stdin);
scanf("%d%d%d",&n,&m,&K);
for(int i=;i<=m;i++)scanf("%d",&a[i]);
int x,y,z;
for(int i=;i<n;i++){
scanf("%d%d%d",&x,&y,&z);
Insert(x,y,z);
Insert(y,x,z);
}
if(K<=&&m>){
solve1();
return ;
}
else {
solve2();
return ;
}
}
CCF模拟题-201909的更多相关文章
- CCF模拟题 窗口
窗口 时间限制: 1.0s 内存限制: 256.0MB 问题描述 在某图形操作系统中,有 N 个窗口,每个窗口都是一个两边与坐标轴分别平行的矩形区域.窗口的边界上的点也属于该窗口.窗口之间有层次的 ...
- CCF模拟题 字符串匹配
字符串匹配 时间限制: 1.0s 内存限制: 256.0MB 问题描述 给出一个字符串和多行文字,在这些文字中找到字符串出现的那些行.你的程序还需支持大小写敏感选项:当选项打开时,表示同一个字母的大写 ...
- CCF模拟题 最优配餐
最优配餐 时间限制: 1.0s 内存限制: 256.0MB 问题描述 栋栋最近开了一家餐饮连锁店,提供外卖服务.随着连锁店越来越多,怎么合理的给客户送餐成为了一个急需解决的问题. 栋栋的连锁店所在 ...
- CCF模拟题 相反数
相反数 时间限制: 1.0s 内存限制: 256.0MB 问题描述 有 N 个非零且各不相同的整数.请你编一个程序求出它们中有多少对相反数(a 和 -a 为一对相反数). 输入格式 第一行包含一个 ...
- CCF模拟题 最优灌溉
最优灌溉 时间限制: 1.0s 内存限制: 256.0MB 问题描述 雷雷承包了很多片麦田,为了灌溉这些麦田,雷雷在第一个麦田挖了一口很深的水井,所有的麦田都从这口井来引水灌溉. 为了灌溉,雷雷需 ...
- CCF模拟题 最大的矩形
最大的矩形 时间限制: 1.0s 内存限制: 256.0MB 问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1 ≤ i ≤ n)个矩形的高度是hi.这n个矩形构成了一个直方 ...
- CCF模拟题 有趣的数
有趣的数 时间限制: 1.0s 内存限制: 256.0MB 问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次. 2. 所有的0都 ...
- poj 1008:Maya Calendar(模拟题,玛雅日历转换)
Maya Calendar Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 64795 Accepted: 19978 D ...
- poj 1888 Crossword Answers 模拟题
Crossword Answers Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 869 Accepted: 405 D ...
随机推荐
- event.stopPropagation()和event.preventDefault()
1.event.stopPropagation()方法 这是阻止事件的冒泡方法,不让事件向documen上蔓延,但是默认事件任然会执行,当你掉用这个方法的时候,如果点击一个连接,这个连接仍然会被打开, ...
- 【STM32H7教程】第25章 STM32H7的TCM,SRAM等五块内存基础知识
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第25章 STM32H7的TCM,SRAM等五块内 ...
- 如何将Azure SQL 数据库还原到本地数据库实例中
原文:https://www.jerriepelser.com/blog/restore-sql-database-localdb/ 原文作者: Jerrie Pelser 译文:如何将Azure S ...
- 解决上一篇bean.xml中<bean>标签报错“ Error while downloading 'http://www.springframework.org/schema/beans/spring-beans.xsd........”
在xml文件中,头部报错如题 一开始查询,说是头部少了“<?xml version="1.0" encoding="UTF-8"?>”,但是我并没有 ...
- 一个小事例,了解golang通道阻塞模式
在学习golang中,channel真的是让人捉摸不透的东西,本来我自以为我理解了协程阻塞的用法了,结果就下面这个小例子,我还是在打印输出后才搞明白到底怎么回事? 当然了,这也是我自身对协程这块不太熟 ...
- Java8 日期和时间API
LocalDate.LocalTime.Instant.Duration.Period 1.1使用LocalDate和LocalTime 1.1.1LocalDate的创建方式和相关方法使用示例 @T ...
- 读取树莓派4B处理器(CPU)的实时温度
读取树莓派4B处理器(CPU)的实时温度 树莓派发布4B后,性能提升了不少,但是温度也是高的不行,所以最好配置一个小风扇和散热片还是比较好的 俩种办法都可以实现 1.Shell命令读取 打开终端 cd ...
- Java性能 -- Lock优化
Lock / synchronized Lock锁的基本操作是通过乐观锁实现的,由于Lock锁也会在阻塞时被挂起,依然属于悲观锁 synchronized Lock 实现方式 JVM层实现 Jav ...
- java报错问题记录
java.lang.NoSuchMethodError 运行时错误,再编译期一般不会出现这个问题.NoSuchMethodError中文意思是没有找到方法,遇到这个错误并不是说依赖的jar包.方法不存 ...
- Linux常见目录说明
常见目录说明 目录 应放置档案内容 /bin/ 存放二进制可执行文件,系统的命令(ls,cat,mkdir等),是/usr/bin/目录的软链接. /sbin/ 存放系统命令,超级用户可以执行.是/u ...