A 小天的金银铜铁
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
int main()
{
int a,b,c,d,e;cin>>a>>b>>c>>d>>e;
int A,B,C,D;cin>>A>>B>>C>>D;
int sum=0;
sum+=A*a+b*B+c*C-D*d;
if(sum>e) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
return 0;
}
B 小天的魔法
#include<bits/stdc++.h>
using namespace std;
int n,m,x,a[105],b[105];
long long ans,num;
int main()
{
cin>>n>>m>>x;
for(int i=0;i<n;i++){
cin>>a[i];
}
for(int i=0;i<m;i++){
cin>>b[i];
}
sort(a,a+n);
sort(b,b+m);
for(int i=m-1,j=n-1;i>=0;i--,j--){
num++;
if(x<=ans+b[i]){
cout<<num;
break;
}
else if(a[j]==0||a[j]==1){
ans+=b[i];
}else{
num++;
ans+=a[j]*b[i];
if(x<=ans){
cout<<num;
break;
}
}
if(i==0){
cout<<"-1";
}
}
return 0;
}
C 小天的Minecraft
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
double a=0.0, b=0.0, c=0.0;
double l;
cin >> t;
for(int i=0; i<t; i++)
{
std::cin >> a >> b >> c;
a = a / 16;
b = b / 16;
c = c / 16;
l = pow(a, 16) + 1820 * pow(a, 12) * (pow(b, 4) + pow(c, 4));//1820为排列组合数
cout << fixed<< setprecision(10)<< l <<endl;
}
return 0;
}
D 小天的子序列
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int mod=998244353;
int n,m;
string s;
int f[26][26][501],c[501][501];
signed main()
{
cin>>n>>s;
s=" "+s;
c[0][0]=1;
for(int i=1;i<=500;i++)
{
c[0][i]=1;
for(int j=1;j<=i;j++)
{
c[j][i]=(c[j-1][i-1]+c[j][i-1])%mod;
}
}
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
{
f[s[i]-'a'][s[j]-'a'][j-i+1]++;
}
}
cin>>m;
while(m--)
{
char x,y;
int l;
cin>>x>>y>>l;
int ans=0;
for(int i=l;i<=n;i++)
{
ans=(ans+f[x-'a'][y-'a'][i]*c[l-2][i-2])%mod;
}
cout<<ans<<endl;
}
}
E 小天的贪吃蛇
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 100010;
void solve() {
int n, m;
cin >> n >> m;
auto a = [&](int i, int j) {
if (i % 2) { return (i - 1) * m + j; }
return i * m - j + 1;
};
auto b = [&](int i, int j) {
if (j % 2) { return (j - 1) * n + i; }
return j * n - i + 1;
};
vector<char> va(n * m + 2), vb(n * m + 2);
set<int> sa, sb;
auto change = [&](vector<char> &v, set<int> &s, int i, int c) {
s.erase(i);
s.erase(i + 1);
v[i] = c;
if(v[i] != v[i - 1]) s.insert(i);
if(v[i] != v[i + 1]) s.insert(i + 1);
};
for(int i = 1;i <= n;i++) {
for(int j = 1;j <= m;j++) {
char c;
cin >> c;
change(va, sa, a(i, j), c);
change(vb, sb, b(i, j), c);
}
}
int q;
cin >> q;
for(int i = 0, op, x, y;i < q;i++) {
cin >> op >> x >> y;
if(op == 1) {
char c;
cin >> c;
change(va, sa, a(x, y), c);
change(vb, sb, b(x, y), c);
}
else if(op == 2) {
cout << *sa.upper_bound(a(x, y)) - a(x, y) << '\n';
}
else {
cout << *sb.upper_bound(b(x, y)) - b(x, y) << '\n';
}
}
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
int T = 1;
//cin >> T;
while(T -- ) {
solve();
}
return 0;
}
F 小天的A+B
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
const int mod = 998244353;
int n, m;
struct BIT {
vector<int>v;
BIT(int n) {
v.resize(n + 1, 0);
}
int query(int l, int r) {
return sum(r) - sum(l - 1);
}
int sum(int i) {
int s = 0;
while (i > 0) {
s += v[i];
i = i & (i - 1);
}
return s;
}
void add(int i, int x) {
while (i <= n) {
v[i] += x;
i += i & -i;
}
}
};
void solve()
{
scanf("%d%d", &n, &m);
vector<int>a(n + 1);
vector<ll>pw2(n + 1);
pw2[0] = 1;
for (int i = 1; i <= n; i++)pw2[i] = pw2[i - 1] * 2 % mod;
BIT pos(n), zero(n);
for (int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
if (a[i] > 0)pos.add(i, 1);
if (a[i] == 0)zero.add(i, 1);
}
while (m--) {
int op, x, y;
scanf("%d%d%d", &op, &x, &y);
if (op == 1) {
if (a[x] > 0)pos.add(x, -1);
if (a[x] == 0)zero.add(x, -1);
a[x] += y;
if (a[x] > 0)pos.add(x, 1);
if (a[x] == 0)zero.add(x, 1);
} else {
if (pos.query(x, y) == 0 && zero.query(x, y) == 0) {
int L = max(x, y - 33);
ll ans = x == L ? a[L] : max(a[L-1],a[L]) * 2;
for (int i = L + 1; i <= y; i++) {
ans = 2 * max(ans, 0ll + a[i]);
}
ans %= mod;
ans += mod;
ans %= mod;
printf("%lld\n", ans);
} else if (pos.query(x, y) > 0) {
int l = x, r = y+1;
while (l < r) {
int mid = l + r >> 1;
if (pos.query(l, mid) > 0) {
r=mid;
} else {
l = mid+1;
}
}
int R = min(l + 32, y);
ll ans = x == l ? a[l] :max(a[l-1],a[l]) * 2;
int left = y - R;
for (int i = l + 1; i <= R; i++){
ans = max(ans, 0ll + a[i]) * 2;
if(ans>0x3f3f3f3f){
left=y-i;
break;
}
}
ans %= mod;
ans *= pw2[left];
ans %= mod;
printf("%lld\n", ans);
} else {
puts("0");
}
}
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
#endif
int tt_ = 1;
// scanf("%d", &tt_);
for (int tt = 1; tt <= tt_; tt++) {
solve();
}
}
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e6+5;
const int mod = 998244353;
int pw[N];
int a[N];
signed main(void){
ios::sync_with_stdio(false);cin.tie(0);
pw[0]=1;
for(int i=1;i<N;i++) pw[i]=(pw[i-1]<<1)%mod;//pw[i]表示2的i次幂对mod取模的结果。
int n,m;
cin>>n>>m;
set<int>pos,zero;
pos.insert(1e18);
zero.insert(1e18);
for(int i=1;i<=n;i++){
cin>>a[i];
if(a[i]>0) pos.insert(i);
if(!a[i]) zero.insert(i);
}
while(m--){
int opt,l,r;
cin>>opt>>l>>r;
if(opt==1){
a[l]+=r;
if(a[l]>0) pos.insert(l);
else if(pos.count(l)) pos.erase(l);
if(!a[l]) zero.insert(l);
else if(zero.count(l)) zero.erase(l);
}
else{
int ll=*pos.lower_bound(l);
int l2=*zero.lower_bound(l);
if(ll>r){
if(l2<=r){
cout<<"0\n";
continue;
}
int p=max(l,r-30);
int res=a[p];
for(int i=p+1;i<=r;i++)
res=max(res,a[i])<<1;
res%=mod;
res=(res+mod)%mod;
cout<<res<<"\n";
}
else{
int res=a[ll];
if(ll!=l) res<<=1;
for(int i=ll+1;i<=r;i++){
res=max(res,a[i])<<1;
if(res>1e9){
res%=mod;
res=res*pw[r-i]%mod;
break;
}
}
cout<<res%mod<<"\n";
}
}
}
return 0;
}
牛客小白月赛83_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ (nowcoder.com)