AtCoder Beginner Contest 178(差点AK,F的数据好像很弱qwq)

A - Not

题意:

输入0/1,之后取反。

思路:(

非一下即可。

AC

#include <iostream>
using namespace std;
int main()
{
    int x;
    cin>>x;//x=!x;
    cout<<(!x)<<endl;
    return 0;
}

B - Product Max

题意:

给你两个取值范围。各取一个数,要求乘积最大。

思路(枚举):

枚举所有情况即可。最后去一个max。(本题由于区间的正负性,所以不能简单的就取右端点)

AC

#include <iostream>
using namespace std;
typedef long long ll;
int main()
{
    ll a[3],b[3];
    cin>>a[1]>>a[2];
    cin>>b[1]>>b[2];
    ll ans=-8e18;
    for(int i=1; i<=2; i++){
        for(int j=1; j<=2; j++){
            ans=max(ans,a[i]*b[j]);
        }
    }
    cout<<ans<<endl;
    return 0;
}

C - Ubiquity

题意:

要求你计算有多少个满足条件的序列。

  1. 存在一个位置的值为0.
  2. 存在一个位置的值为9.

思路(容斥一下):

  1. 先枚举所有情况 ( 1 0 n 10^n 10n
  2. 不满足条件的有两种。没有0,没有9.(0和9都没有)。
  3. 所以 a n s = 1 0 n − 9 n − 9 n + 8 n ans=10^n-9^n-9^n+8^n ans=10n9n9n+8n(由于0和9的这种情况减去了两次,所以要加回来)

AC

#include <vector>
#include <map>
#include <set>
#include <iostream>
using namespace std;
typedef long long ll;
typedef long double ld;
#define maxn 1000010
const ll mod=1e9+7;
#define sz(a) a.size()
typedef pair<int,int> pii;
typedef map<int,int> mii;
typedef vector<int> vi;
typedef vector<vector<int>> vii;
typedef vector<long long> vll;
typedef vector<bool> vb;
typedef set<int> si;
#define fori(i,a,b) for(int i = (a); i < (b); ++i)
#define rep(i,b,a) for(int i = (b); i >= (a); --i)
#define all(a) (a).begin(), (a).end()
#define __builtin_popcountll bitCountLL
#define __builtin_popcount bitCount
//__builtin_ctz 末尾0的个数, __builtin_clz 前导0的个数
//__builtin_ffs 最后一个1的位置
const int INF = 2e9;
const ll ML = 4e18;
ll Pow(ll x, ll p) {
    ll res = 1;
    while(p) {
        if(p & 1) res = (res * x) % mod;
        p >>= 1;
        x = (x * x ) % mod;
    }
    return res;
}
ll fac[maxn], inv[maxn];
void init() {
    fac[0] = fac[1] = 1;
    fori(i,2,maxn) fac[i] = (fac[i-1] * i) % mod;
    inv[maxn-1] = Pow(fac[maxn-1],mod-2);
    rep(i,maxn-2,0) inv[i] = (inv[i+1] * (i + 1)) % mod;
    ///inv[i]=Pow(i,mod-2);
}
ll C(int a, int b) {
    return (fac[b] * inv[a] % mod * inv[b - a] % mod) % mod;
}
ll A(int a, int b) {
    return fac[b] * inv[b-a] % mod;
}
ll cnt[maxn];
ll mul(ll a, ll b){
    return (a%mod)*(b%mod)%mod;
}
vector<int>a[maxn];
int main()
{
    init();
    int n;cin>>n;
    ///if(n==1)return cout<<0<<endl,0;
    ///ll ans=2*C(2,n)%mod;
    ll a=1,b=1,c=1;
    for(int i=1; i<=n; i++){
        a=a*10%mod;
        b=b*9%mod;
        c=c*8%mod;
    }
    a=(a-b%mod+mod)%mod;
    a=(a-b%mod+mod)%mod;
    a=(a+c%mod)%mod;
    cout<<a<<endl;
    return 0;
}/*
// for(int i=1; i<=n-2; i++)ans=ans*10%mod;
   // ans=ans*A(n,n)%mod;
    //a=((a-(b*2%mod)+mod)%mod-c+mod)%mod;
    //cout<<ans<<endl;
    */

D - Redistribution

题解

E - Dist Max

题解

F

题解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值