AtCoder Beginner Contest 156

A - Beginner(模拟)

#include<iostream>
#include<algorithm>
#include<vector>
 using namespace std;
 typedef long long ll;
 int main()
 {
     ll n,r;
     cin>>n>>r;
     if(n>=10) cout<<r<<endl;
     else{
         r=r+100*(10-n);
         cout<<r<<endl;
    }
     return 0;
 }
View Code

B - Digits(模拟)

#include<iostream>
#include<algorithm>
 using namespace std;
 typedef long long ll;
 int main()
 {
     ll n,k;
     cin>>n>>k;
     int cnt=0;
     while(n){
         n/=k;
         cnt++;
     }
    cout<<cnt<<endl;
 }
View Code

C - Rally(枚举)

思路:

由于x很小,所以我们只要枚举1-100看看哪个值最小就行了

#include<iostream>
#include<algorithm>
#define inf 0x3f3f3f3f
 using namespace std;
 const int maxn=105;
 int a[maxn],flag[maxn];
 int main()
 {
     int n;
     scanf("%d",&n);
     for(int i=1;i<=n;i++) scanf("%d",&a[i]);
     int ans=inf,pos=-1,sum=0;
     for(int i=1;i<=100;i++){
         sum=0;
         for(int j=1;j<=n;j++){
             sum+=(a[j]-i)*(a[j]-i);
         }
        if(sum<ans){
            ans=sum;
            pos=i;
        }
     }
     cout<<ans<<endl;
     return 0;
  } 
View Code

D - Bouquet(容斥,逆元求组合数)

思路:

通过容斥定理很明显 ans = 2n - 1 - Can -Cbn ,注意求逆元的取模问题

#include<iostream>
#include<algorithm>
#define inf 0x3f3f3f3f
 using namespace std;
 const int maxn=105;
 int a[maxn],flag[maxn];
 int main()
 {
     int n;
     scanf("%d",&n);
     for(int i=1;i<=n;i++) scanf("%d",&a[i]);
     int ans=inf,pos=-1,sum=0;
     for(int i=1;i<=100;i++){
         sum=0;
         for(int j=1;j<=n;j++){
             sum+=(a[j]-i)*(a[j]-i);
         }
        if(sum<ans){
            ans=sum;
            pos=i;
        }
     }
     cout<<ans<<endl;
     return 0;
  } 
View Code

猜你喜欢

转载自www.cnblogs.com/overrate-wsj/p/12347563.html