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 ...
随机推荐
- 【文本处理命令】之sed命令详解
sed行处理命令详解 一.简介 sed命令是一种在线编辑器.一个面向字符流的非交互式编辑器,也就是说sed不允许用户与它进行交互操作.sed是按行来处理文本内容的,它一次处理一行内容.处理时,把当前处 ...
- 纯手打AJAX,还有一个对象转查询字符串的小方法obj=>url
function json2url(json){ var arr=[]; for(var name in json){ arr.push(name+'='+json[name]); } return ...
- mysql常用命令杂记
查看版本 mysqladmin -uRootmaster -pRootmaster@777 versionselect version() 查看Log_bin是否开启 show variables l ...
- mysql压缩备份导入导出
mysqldump工具自带选项没有对导出备份文件压缩功能,可结合gzip只使用一条命令压缩导出文件,方法如下: mysqldump压缩导出:# mysqldump -h192.168.0.3 -P33 ...
- git 清除远程仓库已经删除的本地分支 清除已经合并到master的本地分支
在gitlab中执行deleted merged.也是可以在本地看到这些分支的 查看本地分支和追踪情况: git remote show origin 可以发现远程分支已被删除的分支,根据提示可以使用 ...
- Percona Monitoring and Management (PMM) - 快速入门
前言 数据库监控工具最常用的就是zabbix了,zabbix能将收集到的数据通过图表展示出来,并通过设置阈值及时告警.可zabbix对于文本的处理就不行了,比方说抓取数据库运行的sql,这个zabbi ...
- 什么是SFP光模块?
什么是光模块? 光模块(optical module)由光电子器件.功能电路和光接口等组成,光电子器件包括发射和接收两部分.简单的说,光模块的作用就是光电转换,发送端把电信号转换成光信号,通过光纤传送 ...
- MSSQL查询当前登录进程以及执行状态
--当前连接进程declare @tempTable table (SPID INT,Status VARCHAR(255), Login VARCHAR(255),HostName VARCHAR( ...
- java基础第十七篇之网络编程和装饰者模式
1:网络概述 1.1 网络的发展Net 1964年,美国人---> 阿帕网--->以太网Internet 1.2 网络的通信协议 windows电脑,android手机,Mac平板---& ...
- IOC控制反转、Unity简介
参考博客地址: Unity系列文章,推荐:http://www.cnblogs.com/qqlin/archive/2012/10/16/2717964.html https://www.cnblog ...