题目链接:http://codeforces.com/contest/435
解题报告:
水题,直接模拟上车过程即可
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int arr[120];
int main()
{
int n,m,i,ans=1;
cin>>n>>m;
for(i=0;i<n;i++)
cin>>arr[i];
int tm=m;
for(i=0;i<n;i++)
{
if(tm>=arr[i]) tm-=arr[i];
else
{
tm = m;
i--;
ans++;
}
}
cout<<ans<<endl;
return 0;
}
B - Pasha Maximizes
贪心,从最前面的位开始考虑,每位都选取 k 范围内最大的数 arr【p】 = tmax 来替代,然后相当于消耗掉 p-i 次机会,再考虑下一个 i 位置。
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char str[2222];
int arr[2222];
int main()
{
//freopen("input.txt","r",stdin);
int k,i,j;
scanf("%s",str);
cin>>k;
int len = strlen(str);
for(i=0;i<len;i++) arr[i] = str[i] - '0';
//for(i=0;i<len;i++)cout<<arr[i]; cout<<endl;
for(i=0;i<len;i++)
{
if(k<=0)break;
int p=i,tmax=arr[i];
for(j = i+1; j <= i+k; j++)
{
if(arr[j]>tmax)
{
tmax = arr[j];
p = j;
}
}
//cout<<tmax<<endl;
k -= p-i;
for(j=p;j>=i+1;j--) arr[j] = arr[j-1];
arr[i] = tmax;
}
for(i=0;i<len;i++)cout<<arr[i]; cout<<endl;
return 0;
}
C - Cardiogram
模拟水题,考点是英语,出题人自己也知道题意出坑了,还告诉我们WA在第一组数据上没罚时。。。
好吧,开一个大数组直接模拟就行了。不过我用'\0' 截取字符串总出错。。。后来改成记录好空格应该打到哪(变量bor) 就好了。
用'\0' 截取应该是没问题的,为啥会出错我也不清楚,数组太大了??好吧,,大概是运气问题,而且这题确实不用那么截
记好位置再一位一位打印更靠谱
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char grid[2010][1010];
int main()
{
//freopen("input.txt","r",stdin);
int n,i,j,num;
memset(grid,0,sizeof(grid));
for(i=0;i<2010;i++)
for(j=0;j<1010;j++) grid[i][j] = ' ';
cin>>n;
int ti = 1005,tj = 0;
for(i=0;i<n;i++)
{
cin>>num;
if(i%2 == 0)
{
while(num--)
grid[ti--][tj++] = '/';
ti++;
}
else
{
while(num--)
grid[ti++][tj++] = '\\';
ti--;
}
}
for(j=1009;j>=0;j--)
{
bool check = false;
for(i=0;i<2010;i++)if(grid[i][j] != ' ')check = true;
if(check)break;
}
int bor = j+1;
for(i=0;i<2010;i++)
{
bool flag =false;
for(j=0;j<1010;j++) {
if(grid[i][j] != ' ') {flag = true; break;}
}
if(flag)
{
for(j=0;j<bor;j++)
cout<<grid[i][j];
cout<<endl;
}
}
return 0;
}