事先声明:本人就是洛谷欢乐赛【11月】主办方
#include <iostream>
#include <cstdio>
using namespace std;
int main() {
int a,b;
cin >> a >> b;
cout << a+b;
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int x[10000001],y[100000001],ans,sum,w,h,qx,qy;
char c[1001][1001];
bool flag[1001][1001];
int py[]={0,-1,0,1,0},px[]={0,0,1,0,-1};//上下左右
int se(int sy,int sx){
// cout<<sy<<" "<<sx<<endl;
for(int i=1;i<=4;i++){
int dy=py[i]+sy,dx=px[i]+sx;
if(flag[dy][dx]==0&&c[dy][dx]=='.'&&dy<=h&&dy>0&&dx<=w&&dx>0){
flag[dy][dx]=1;
sum++;
se(dy,dx);
}
}
}
int main(){
cin>>w>>h;
for(int i=1;i<=h;i++)
for(int j=1;j<=w;j++){
cin>>c[i][j];
if(c[i][j]=='@')qx=j,qy=i;
}
sum++;
flag[qy][qx]=1;
se(qy,qx);
cout<<sum<<endl;
return 0;
}
#include <cstdio>
typedef long long ll;
const int N = 1e5 + 5;
ll n, d;
ll dis[N], money[N], nxt[N], dis_sum[N], can_dis, ans;
int main()
{
//freopen("road.in", "r", stdin);
//freopen("road.out", "w", stdout);
scanf("%lld %lld", &n, &d);
ll i, dist, last_m, last_i;
for (i = 1; i < n; i++)
scanf("%lld", &dis[i]);
for (i = 2; i <= n; i++)
dis_sum[i] = dis_sum[i - 1] + dis[i - 1];// 计算从 1 到 i 的距离
for (i = 1; i <= n; i++)
scanf("%lld", &money[i]);
last_m = money[1];
last_i = 1;
for (i = 2; i <= n - 1; i++)
{
if (money[i] < last_m)// 遇到比上一个加油站便宜的
{
nxt[last_i] = i;// 类似与链表的方式存储下一个加油站
last_i = i;
last_m = money[i];
}
}
nxt[last_i] = n; // 要到 n 号点,可以把 n 号点看作价钱位 0
for (i = 1; i < n;)
{
dist = dis_sum[nxt[i]] - dis_sum[i];
ans += (dist - can_dis + d - 1) / d * money[i];// 要考虑还剩多少油
// can_dis 表示还能开多少距离
can_dis += (dist - can_dis + d - 1) / d * d; // 注意油量要向上取整
can_dis -= dist;
i = nxt[i];// 向下一个加油站开
}
printf("%lld\n", ans);
return 0;
}
#include <iostream>
using namespace std;
int main()
{
int a, b;
cin >> a >> b;
//特判
if(a == 1)
{
cout << 1 << endl;
return 0;
}
if(b == 1)
{
cout << a << endl;
return 0;
}
if(a > 31622)
{
cout << -1 << endl;
return 0;
}
if(b > 29)
{
cout << -1 << endl;
return 0;
}
long long fac = 1;
for(int i = 1;i <= b;i++) //i 表示准备乘上第 i 个 a
{
if((1e9 / double(fac)) < a) //准备乘上的时候看看是否超出限制
{
cout << -1 << endl;
return 0;
}
fac *= a;
}
cout << fac << endl;
return 0;
}
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
const int size = 5005;
int a[size];
int main()
{
int L,N;
cin>>L>>N;
if (!N) //特判 N==0的情况
{
cout<<"0 0"<<endl;
return 0;
}
for (int i=1;i<=N;i++) cin>>a[i]; //输入
sort(a+1,a+N+1); //从小到大排序(算最长时间时可能方便一些)
int max_time,min_time;
for (int i=1;i<=N;i++)
min_time=max(min(a[i],L+1-a[i]),min_time); //最短时间就是所有人中走完桥最小值中的最大值
max_time=max(L+1-a[1],a[N]); //最长时间就是最靠近端点两个人各自向对方走,
//时间较长的那个人的时间 (排序的好处)
cout<<min_time<<' '<<max_time<<endl;
return 0;
}