算法竞赛入门经典(第二版)-刘汝佳-第四章 函数与递归 特别困的学生 (特困生)
2016-08-03 15:19
274 查看
http://acm.hust.edu.cn/vjudge/contest/123676#problem/N 密码 5201
#include<cstdio>
#include<cstring>
#include<string>
#include<map>
#include<algorithm>
#include<iostream>
using namespace std;
int stu[15][11000];
int n;
// 1醒 -1睡
int num_0(int t)
{
int i,ret(0);
for(i=0;i<n;i++) if( stu[i][t]==0 ) ret++;
return ret;
}
int sleep(int t)
{
int ret(0),i;
for(i=0;i<n;i++)
{
if(stu[i][t]==-1) ret++;
}
if(ret>n-ret) return -1;
return 1;
}
int isok(int t)
{
int i,ret(0);
for(i=0;i<n;i++)
{
if(stu[i][t]==-1) ret++;
}
if(ret==0) return 1;
return 0;
}
int main()
{
//freopen("C:\\Users\\5201\\Desktop\\1.txt","r",stdin);
//freopen("C:\\Users\\5201\\Desktop\\yb.txt","w",stdout);
int casetime(1);
while(cin>>n,n)
{
memset(stu,0,sizeof(stu));
printf("Case %d: ",casetime++);
int i,j;
int a[15]={},b[15]={},c[15]={};
for(i=0;i<n;i++)
{
cin>>a[i]>>b[i]>>c[i];
j=0;
if(c[i]<=a[i])
{
for(j;j<a[i]-c[i]+1;j++) stu[i][j]=1;//醒
for(int k=0;k<b[i];j++,k++) stu[i][j]=-1;//睡
for(int k=0;k<a[i];j++,k++) stu[i][j]=1;
}
else
{
for(j=0;j<a[i]+b[i]-c[i]+1;j++) stu[i][j]=-1;
for(int k=0;k<a[i];j++,k++) stu[i][j]=1;
}
}
int ans(0);
for(ans;ans<10000;ans++)
{
if(isok(ans))
{
printf("%d\n",ans+1);
break;
}
if(num_0(ans))
{
for(i=0;i<n;i++)
{
if(stu[i][ans]==0)
{
int t=sleep(ans-1);
if(t==1)
{
for(j=0;j<a[i];j++) stu[i][ans+j]=1;
}
else
{
for(j=0;j<b[i];j++) stu[i][ans+j]=-1;
for(int k(0);k<a[i];k++,j++) stu[i][ans+j]=1;
}
}
}
}
}
if(ans>=10000) printf("-1\n");
}
return 0;
}
ps
1.简单模拟。
2.对于-1 模拟1w次 超过就是-1 无严谨证明
#include<cstdio>
#include<cstring>
#include<string>
#include<map>
#include<algorithm>
#include<iostream>
using namespace std;
int stu[15][11000];
int n;
// 1醒 -1睡
int num_0(int t)
{
int i,ret(0);
for(i=0;i<n;i++) if( stu[i][t]==0 ) ret++;
return ret;
}
int sleep(int t)
{
int ret(0),i;
for(i=0;i<n;i++)
{
if(stu[i][t]==-1) ret++;
}
if(ret>n-ret) return -1;
return 1;
}
int isok(int t)
{
int i,ret(0);
for(i=0;i<n;i++)
{
if(stu[i][t]==-1) ret++;
}
if(ret==0) return 1;
return 0;
}
int main()
{
//freopen("C:\\Users\\5201\\Desktop\\1.txt","r",stdin);
//freopen("C:\\Users\\5201\\Desktop\\yb.txt","w",stdout);
int casetime(1);
while(cin>>n,n)
{
memset(stu,0,sizeof(stu));
printf("Case %d: ",casetime++);
int i,j;
int a[15]={},b[15]={},c[15]={};
for(i=0;i<n;i++)
{
cin>>a[i]>>b[i]>>c[i];
j=0;
if(c[i]<=a[i])
{
for(j;j<a[i]-c[i]+1;j++) stu[i][j]=1;//醒
for(int k=0;k<b[i];j++,k++) stu[i][j]=-1;//睡
for(int k=0;k<a[i];j++,k++) stu[i][j]=1;
}
else
{
for(j=0;j<a[i]+b[i]-c[i]+1;j++) stu[i][j]=-1;
for(int k=0;k<a[i];j++,k++) stu[i][j]=1;
}
}
int ans(0);
for(ans;ans<10000;ans++)
{
if(isok(ans))
{
printf("%d\n",ans+1);
break;
}
if(num_0(ans))
{
for(i=0;i<n;i++)
{
if(stu[i][ans]==0)
{
int t=sleep(ans-1);
if(t==1)
{
for(j=0;j<a[i];j++) stu[i][ans+j]=1;
}
else
{
for(j=0;j<b[i];j++) stu[i][ans+j]=-1;
for(int k(0);k<a[i];k++,j++) stu[i][ans+j]=1;
}
}
}
}
}
if(ans>=10000) printf("-1\n");
}
return 0;
}
ps
1.简单模拟。
2.对于-1 模拟1w次 超过就是-1 无严谨证明
相关文章推荐
- 算法竞赛入门经典(第二版)-刘汝佳-第四章 函数与递归 洪水!
- 算法竞赛入门经典(第二版)-刘汝佳-第四章 函数与递归 象棋
- 算法竞赛入门经典(第二版)-刘汝佳-第四章 函数与递归 追踪电子表格中的单元格Uva512
- 算法竞赛入门经典(第二版)-刘汝佳-第四章 函数与递归 互联网协议网络Uva1590
- 算法竞赛入门经典(第二版)-刘汝佳-第四章 函数与递归 黑白翻转棋
- 算法竞赛入门经典(第二版)-刘汝佳-第四章 函数与递归 师兄帮帮忙
- 算法竞赛入门经典(第二版)-刘汝佳-第四章 函数与递归 例题+习题(15/16)
- 算法竞赛入门经典(第二版)-刘汝佳-第四章 函数与递归 Morse Mismatches
- 算法竞赛入门经典(第二版)-刘汝佳-第四章 函数与递归 骰子上色Uva253
- 算法竞赛入门经典(第二版)-刘汝佳-第四章 函数与递归 刽子手游戏
- 算法竞赛入门经典(第二版)-刘汝佳-第四章 函数与递归 信息解码
- 算法竞赛入门经典(第二版)-刘汝佳-第四章 函数与递归 师兄帮帮忙 Uva12412
- 算法竞赛入门经典(第二版)-刘汝佳-第四章 发放救济金
- 算法竞赛入门经典(第二版)-刘汝佳-第三章 数组与字符串 例题+习题(17/18)
- 章节读后感-第一部分-第四章:函数和递归
- 算法竞赛入门经典(第二版)-刘汝佳-第八章 高效算法设计 习题(6/28)
- 算法竞赛入门经典(第二版)-刘汝佳-第三章-例题3-5 环状序列
- 算法竞赛入门经典(第二版)-刘汝佳-第三章-例题3-5生成元
- 算法竞赛入门经典(第二版)-刘汝佳-第六章 数据结构基础 例题(17/22)
- 算法竞赛入门经典(第二版)-刘汝佳-第三章 数组与字符串 环状序列