N
签到题,最终结果就是,无论怎么变换都是原来的值,就是前面全是1后面全是0的情况。
#include <bits/stdc++.h>
using namespace std ;
#define ll unsigned long long
#define endl '\n'
ll gcd(ll a, ll b) {
return b==0 ? a : gcd(b,a%b);
}
ll sum1,sum2;
ll a[100005];
ll bit[15];
int main() {
int maxx=0;
ll n;
cin>>n;
for(int i=1;i<=n;i++) {
cin>>a[i];
int temp=0;
while(a[i]>0) {
bit[temp] += (a[i]&1);
a[i]>>=1;
temp++;
maxx = max(maxx,temp);
}
}
ll temp=0;
for(int i=1;i<=n;i++) {
temp=0;
for(int j=0,z=1;j<=15;j++,z<<=1){
if(bit[j]>0) {
bit[j]--;
temp+=z;
}
}
sum1 += temp * temp;
sum2 += temp;
}
ll ans = sum1 * n - sum2 * sum2;
ll div = (ll)n * n;
ll t = gcd (ans,div);
if(t!=1) {
ans /= t;
div /= t;
}
cout<<ans<<"/"<<div<<endl;
return 0;
}
K
暴力枚举
#include <bits/stdc++.h>
using namespace std ;
int a,n,ans;
bool check(int i,int j) {
int y=(i-(a*(int)pow(10,j)%n)+n)%n;
if(y<(int)pow(10,j)) return 1;
else return false;
}
int main() {
//int n ;
cin>>n;
if(n==1 ) {
cout<<0<<endl;
return 0;
}
for(int i=1;i<=n;i++) {
for(int j=1;j<=6;j++) {
if(check(i,j)) {
a=i;
ans+=j;
break;
}
}
}
cout<<ans<<endl;
return 0;
}
L
纯数学题,而且正多边形就五个,百度一下,直接输出答案
#include<bits/stdc++.h>
using namespace std;
long double PI = acosl(-1);
void shrink(int &n, long double &a) {
int N = -1; long double A;
if(n == -1) return ;
if(n == 4) {
N = 4;
A = a / 3;
}
if(n == 6) {
N = 8;
A = a / sqrtl(2);
}
if(n == 8) {
N = 6;
A = sqrtl(2) * a / 3;
}
if(n == 12) {
N = 20;
A = a * (3 * sqrtl(5) + 5) / 10;
}
if(n == 20) {
N = 12;
A = a * (sqrtl(5) + 1) / 6;
//A = 2 * a * cosl(PI / 5) / 3;
}
n = N, a = A;
}
int n;
long double a;
int k, T;
int main() {
scanf("%d", &T);
while(T--) {
scanf("%d%Lf%d", &n, &a, &k);
while(k--)
shrink(n, a);
if(n == -1) printf("impossible\n");
else printf("possible %d %.12Lf\n", n, a);
}
return 0;
}
剩下的之后补上,咕咕