浙江中医药大学程序设计代表队2018年训练赛十(BCD)
2018-04-09 15:04
435 查看
【前言】
A是签到题叭就不管了先给链接叭按顺序哒
【链接】
http://acm.zcmu.edu.cn/JudgeOnline/problem.php?id=2104
http://acm.zcmu.edu.cn/JudgeOnline/problem.php?id=2105
http://acm.zcmu.edu.cn/JudgeOnline/problem.php?id=2106
【分析】
不知道有什么好分析的...
噢噢有一个就是如果已存在要更新。所以在create的时候就判断之前是否有出现过,如果有,更新,然后id--。操作0和1的判断就放在open的时候,如果是1就往前找,0就输出。
写这道题学会了用字符数组
【代码】
#include<cstdio>
#include<cstring>
using namespace std;
int type[1010]; //保存操作类型
char name[1010][25];
char data[1010][25];
int main()
{
char cmd[10],str[25];
int id=0,i;
while(~scanf("%s",cmd)){
if(cmd[0]=='e') break;
if(cmd[0]=='c'){
scanf("%s%d%s",name[id],&type[id],data[id]);
for(i=id-1;i>=0;i--)
if(!strcmp(name[id],name[i])){
strcpy(data[i],data[id]);
type[i]=type[id];
id--;
}
id++;
}
else{
scanf("%s",str);
for(i=id;i>=0;i--)
if(!strcmp(str,name[i])){
if(type[i])
strcpy(str,data[i]);
else{
printf("%s\n",data[i]);
break;
}
}
}
}
return 0;
}
【分析】
拿着纸笔推了半天...还是wa了...对我就是个傻子...还是代码来叭
每个可能答案都满足一半也就是三个条件为真,用返回值之和==3判断。有关联的自定义函数顺序不能颠倒,不然就调用不了了。
【代码】#include<stdio.h>
#include<cstring>
int f[7];
int A(){
if (!f[0]) return 1;
return 0;
}
int B(){
if (f[0]||f[2]) return 1;
return 0;
}
int C(){
if (!A()&&!B()) return 1;
return 0;
}
int F(){
if (f[5]) return 1;
return 0;
}
int D(){
if (!C()&&!F()) return 1;
return 0;
}
int E(){
if (A()&&D()&&!B()&&!C()&&!F()) return 1;
return 0;
}
int main(){
for (int i=0;i<6;i++){
memset(f,0,sizeof(f));
f[i]=1;
if(A()+B()+C()+D()+E()+F()==3)
printf ("%c\n",'A'+i);
}
return 0;
}
【分析】
用到了dfs...鉴于我太菜了不便多说,直接上代码
【代码】#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define INF 0x3f3f3f3f
int a[100];
int v[100];
int ans,n,m;
void dfs( int i , int num , int sum )
{
if(num==m){
ans=max(ans,sum);
return;
}
if(i>n) return;
if(!v[i-1]&&!v[i+1]){
v[i]=1;
if(i==1) v[n+1]=1;
dfs(i+2,num+1,sum+a[i]);
v[i]=0;
if(i==1) v[n+1]=0;
}
dfs(i+1,num,sum);
}
int main()
{
while( ~scanf("%d %d" , &n, &m)){
memset(v,0,sizeof(v));
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
if(m>n/2)
printf("Error!\n");
else{
ans=-INF;
dfs(1,0,0);
printf("%d\n",ans);
}
}
return 0;
}
A是签到题叭就不管了先给链接叭按顺序哒
【链接】
http://acm.zcmu.edu.cn/JudgeOnline/problem.php?id=2104
http://acm.zcmu.edu.cn/JudgeOnline/problem.php?id=2105
http://acm.zcmu.edu.cn/JudgeOnline/problem.php?id=2106
【分析】
不知道有什么好分析的...
噢噢有一个就是如果已存在要更新。所以在create的时候就判断之前是否有出现过,如果有,更新,然后id--。操作0和1的判断就放在open的时候,如果是1就往前找,0就输出。
写这道题学会了用字符数组
【代码】
#include<cstdio>
#include<cstring>
using namespace std;
int type[1010]; //保存操作类型
char name[1010][25];
char data[1010][25];
int main()
{
char cmd[10],str[25];
int id=0,i;
while(~scanf("%s",cmd)){
if(cmd[0]=='e') break;
if(cmd[0]=='c'){
scanf("%s%d%s",name[id],&type[id],data[id]);
for(i=id-1;i>=0;i--)
if(!strcmp(name[id],name[i])){
strcpy(data[i],data[id]);
type[i]=type[id];
id--;
}
id++;
}
else{
scanf("%s",str);
for(i=id;i>=0;i--)
if(!strcmp(str,name[i])){
if(type[i])
strcpy(str,data[i]);
else{
printf("%s\n",data[i]);
break;
}
}
}
}
return 0;
}
【分析】
拿着纸笔推了半天...还是wa了...对我就是个傻子...还是代码来叭
每个可能答案都满足一半也就是三个条件为真,用返回值之和==3判断。有关联的自定义函数顺序不能颠倒,不然就调用不了了。
【代码】#include<stdio.h>
#include<cstring>
int f[7];
int A(){
if (!f[0]) return 1;
return 0;
}
int B(){
if (f[0]||f[2]) return 1;
return 0;
}
int C(){
if (!A()&&!B()) return 1;
return 0;
}
int F(){
if (f[5]) return 1;
return 0;
}
int D(){
if (!C()&&!F()) return 1;
return 0;
}
int E(){
if (A()&&D()&&!B()&&!C()&&!F()) return 1;
return 0;
}
int main(){
for (int i=0;i<6;i++){
memset(f,0,sizeof(f));
f[i]=1;
if(A()+B()+C()+D()+E()+F()==3)
printf ("%c\n",'A'+i);
}
return 0;
}
【分析】
用到了dfs...鉴于我太菜了不便多说,直接上代码
【代码】#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define INF 0x3f3f3f3f
int a[100];
int v[100];
int ans,n,m;
void dfs( int i , int num , int sum )
{
if(num==m){
ans=max(ans,sum);
return;
}
if(i>n) return;
if(!v[i-1]&&!v[i+1]){
v[i]=1;
if(i==1) v[n+1]=1;
dfs(i+2,num+1,sum+a[i]);
v[i]=0;
if(i==1) v[n+1]=0;
}
dfs(i+1,num,sum);
}
int main()
{
while( ~scanf("%d %d" , &n, &m)){
memset(v,0,sizeof(v));
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
if(m>n/2)
printf("Error!\n");
else{
ans=-INF;
dfs(1,0,0);
printf("%d\n",ans);
}
}
return 0;
}
相关文章推荐
- 浙江中医药大学程序设计代表队2018年训练赛十一(BCD)
- 浙江中医药大学程序设计代表队2018年训练赛十二(AE)
- 2017年浙江中医药大学大学生程序设计竞赛-A:不存在的树(树链剖分)
- 2017年浙江中医药大学大学生程序设计竞赛(重现赛)-H剪纸
- Java实验1 java语言程序设计基础训练
- 首届华中区程序设计邀请赛暨第十届武汉大学程序设计大赛训练总结【8/11】
- 系统性训练,励志刷完挑战程序设计竞赛-代码整理1~42【初级篇】
- 2017年浙江中医药大学大学生程序设计竞赛(重现赛)
- 2017年浙江中医药大学大学生程序设计竞赛(重现赛)A - 不存在的树
- 2017年浙江中医药大学大学生程序设计竞赛 - H 剪纸(DFS)
- 第九届北京化工大学程序设计竞赛训练总结【7/10】
- 山东省第八届ACM大学生程序设计竞赛 训练总结 [8/11] 待补
- 系统性训练,励志刷完挑战程序设计竞赛-代码整理43~68【初级篇】
- 系统性训练,励志刷完挑战程序设计竞赛-代码整理135~【中级篇】
- 2017年浙江中医药大学大学生程序设计竞赛(重现赛)H - 剪纸
- 浙江中医药大学暑期训练测试赛八A
- 浙江中医药大学暑期训练测试赛八I
- 浙江中医药大学暑期训练测试赛八E
- 挑战编程 程序设计竞赛训练手册-1.6.7 将军(Check_the_Check)
- 系统性训练,励志刷完挑战程序设计竞赛-代码整理68~103【初级篇】