集训第一天 !(分组赛)

#include <bits/stdc++.h>


using namespace std;


int main()
{
int n;
while(cin>>n)
{
cout<<n*0.1<<" "<<n*0.3<<" "<<n*0.6<<endl;
}
    return 0;

}

这是第一道排名题目

#include <bits/stdc++.h>


struct node
{
int b,e;
}s[105],t;


using namespace std;
int main()
{
int n,i,j,cn,ts;
while(cin>>n)
{
if(n==0)
break;
for(i=0;i<n;i++)
cin>>s[i].b>>s[i].e;
for(i=0;i<n;i++)
for(j=0;j<n-1-i;j++)
{
if(s[j].e>s[j+1].e)
{
t=s[j];
s[j]=s[j+1];
s[j+1]=t;
}
}
ts=s[0].e;
cn=1;
for(i=1;i<n;i++)
{
if(s[i].b>=ts)
{
ts=s[i].e;
cn++;
}
}
cout<<cn<<endl;
}
return 0;
}

这是目标是能看尽量多的完整节目先根据各个节目结束的时间进行排序,

然后进行把开始时间传给一个临时变量,进行始末比较,

找到合适的进行统计,然后给临时变量换值;

#include <bits/stdc++.h>

using namespace std;

long long fib[1000123];
int main()
{
    int n;
    fib[0] = 0, fib[1] = 1;
    for (int i = 2; i < 1000001; i++)
    {
        fib[i] = (fib[i - 1] + fib[i - 2]) % 1000000007;
    }
    while (cin>>n)
    {
        cout<<fib[n]<<endl;
    }
}

打表防止超时进行计算超大递归函数。


不知不觉中我们学校开始承办区域赛了,不过身为主办方,一个比较重要的事情就是要安排好比赛的时候的座次,要求相同学校的队伍不相邻,在这里我们不需要来安排座位,你只要检查一个安排好了的座次表是不是存在有相同学校的队伍相邻的情况就好
为了简化问题,这里我们令比赛场地为n*m的矩形,每个队伍用它的学校的编号表示,一个座位上下左右和斜对角一共八个位置(如果存在的话)定义为和这个座位相邻的座位。

Input

多组输入,处理到文件结束(EOF
每组数据第一行为两个整数n,m代表比赛场地的大小(0 < = n,m < = 100)
接下来有n行,每行m个数字
分别为A1,A2..Am(0 < = Ai < = 200)代表这个座位的队伍的学学校的编号

Output

如果存在有相同学校的队伍相邻的情况输出”Oh~no!!!“
否则输出“\(^o^)/~”
(不包括引号)

Example Input
2 3
1 2 3
4 5 1
1 2
1 1
Example Output
\(^o^)/~
Oh~no!!!
Hint
 
#include <bits/stdc++.h>
using namespace std;
int data[112][112];
int dirc[8][2]={{0,1},{1,0},{0,-1},{-1,0},{1,1},{1,-1},{-1,-1},{-1,1}};
int main()
{
    int n,m,i,j;
    while(cin>>n>>m)
    {
    memset(data,-1,sizeof(data));
    for(i=1;i<=n;i++)
    for(j=1;j<=m;j++)
    cin>>data[i][j];
    int flag=1;
    for( i=1;i<=n;i++)
    for( j=1;j<=m;j++)
    for(int k=0;k<8;k++)
    {
    int tx=i+dirc[k][0];
    int ty=j+dirc[k][1];
    if(data[tx][ty]==data[i][j])
    flag=0;
    }
    if(flag)
    cout<<"\\(^o^)/~"<<endl;
    else
    cout<<"Oh~no!!!"<<endl;
    }
}

这个题是对数组边界扩充其次把各种对应的情况存到二维数组中,高大上!!!!

Lue 站在了一个 n*m 的填有数字的矩阵中,他可以选择从矩阵的四个顶点之一出发,到达斜对面的顶点。每一步必须向靠近目的地的方向移动,且每次移动都可以累加所在位置上的数字。

例如,bLue 选择从左上角出发,那么目的地为右下角,则他每次只能向右或向下移动一格。

现在他想知道在所有的走法中,能获得的最大累加和是多少。你能帮助他吗?

Input

输入数据有多组(数据组数不超过 50),到 EOF 结束。

对于每组数据:

  • 第 1 行输入 2 个整数 n, m (1 <= n, m <= 100),表示矩阵的行数和列数。
  • 接下来 n 行,每行包含 m 个用空格隔开的整数 aij (0 <= aij <= 10000),表示这个数字矩阵。
Output

对于每组数据,输出 1 行,包含 1 个整数,表示 bLue 能获得的最大的累加和。

Example Input
3 4
1 2 3 4
1 0 6 5
4 7 2 0
Example Output
28

#include <bits/stdc++.h>
using namespace std;
int main()
{
int a[200][200],b[200][200],c[200][200];
int n,m,i,j;
while(cin>>n>>m)
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
for( i=1;i<=n;i++)
for( j=1;j<=m;j++)
cin>>a[i][j];
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
b[i][j]=a[i][j]+max(b[i-1][j],b[i][j-1]);
for(i=1;i<=n;i++)
for(j=m;j>=1;j--)
{
c[i][j]=a[i][j]+max(c[i-1][j],c[i][j+1]);
}
cout<<max(b[n][m],c[n][1])<<endl;
}
return 0;
}
动态规则,打一个新的数组来保存所有可能的来源最大值,然后最后再求最大

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值