E-Rise of Shadows
题意:
判断所给年份是否是闰年并且是质数
思路:
润年的判断方法:能被4整除不能被100整除或者能被400整除
由此可知:所有的闰年都不是质数
AC代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e6+5;
int t,tem;
int main() {
cin>>t;
while(t--){
cin>>tem;
cout<<"no"<<endl;
}
return 0;
}
K-Yet Another Problem About Pi
题意:
给定宽和高的平面方格,问经过π 路程最多可以经过多少个方格
思路:
首先,容易想到最少经过四个;
再仔细分析:只要经过一个点那么就可以以极小的代价(几乎可以忽略,因为π是无限不循环小数)访问该点临近的四个方格,那么问题就可以转化成尽可能多得过顶点;
这时容易想到沿着短的一边走;但还可以沿着对角线走;
沿着短的一边走:起点(4个)每经过一个点加2
沿着对角线走:起点(4个)每经过一个点加3
由此有两种贪心策略:
1、沿着短的一边走,走到最后一个顶点时,往后退一步看能否沿对角线走
2、沿着对角线走,走到最后一个顶点时:1.看剩余路程能否沿短的一边走 2.往后退一步看能否沿短的一边走两个顶点
AC代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define rep1(i,a,b) for(int i=a;i<b;i++)
#define pre(i,a,b) for(int i=a;i>=b;i--)
#define pre1(i,a,b) for(int i=a;i>b;i--)
#define pep(i,stl) for(auto i:stl)
#define INF 0x7fffffff
#define eps 1e-6
#define fi first
#define se second
#define pb push_back
#define debug(x) cout<<x<<endl
#define mem(a,b) memset((a),(b),sizeof(a))
const int mod=4933;
const double pi = acos(-1);
typedef double db;
#define pep(i,stl) for(auto i:stl)
const int N = 2e6+5;
int n,m;
int t;
int main() {
double n,m;
cin>>t;
while(t--){
int ans=4,tem=0,te=0;
cin>>n>>m;
db wid=min(n,m),len=sqrt(n*n+m*m);
int t1=floor(pi/wid);
if(t1){
db left=pi-t1*wid+wid;
if(left>len) tem=t1*2+1;
else tem=t1*2;
}
t1=floor(pi/len);
if(t1){
db left=pi-t1*len;
if(left>wid) te=t1*3+2;
else if(left+len>2*wid) te=t1*3+1;
else te=t1*3;
}
tem=max(te,tem);
cout<<ans+tem<<endl;
}
return 0;
}
D-OR
题意:
给定两个序列b,c; b i = a i − 1 ∣ a i , c i = a i − 1 + a i b_i=a_{i-1}|a_i,c_i=a_{i-1}+a_i bi=ai−1∣ai,ci=ai−1+ai求满足条件的序列a的个数
思路:
位运算的性质: a + b = a ∣ b + a & b a+b=a|b+a\&b a+b=a∣b+a&b
对于数组a,只要确定其中某一个数,则整个数组都可以确定
考虑 a 1 a_1 a1(考虑其他数也可以,这里以 a 1 a_1 a1为例):
二进制枚举:1.当前为1/0 2.即可为0又可为1
即假设 a i a_i ai的某一位为1/0,代入条件中判断是否成立,若成立则cnt++;
最后:ans*=cnt;
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define rep1(i,a,b) for(int i=a;i<b;i++)
#define pre(i,a,b) for(int i=a;i>=b;i--)
#define pre1(i,a,b) for(int i=a;i>b;i--)
#define pep(i,stl) for(auto i:stl)
#define INF 0x7fffffff
#define eps 1e-9
#define mem(a,b) memset((a),(b),sizeof(a))
const int N=1e6+1000;
typedef double db;
const int mod=1e9+7;
const double PI = acos(-1);
#define pep(i,stl) for(auto i:stl)
int n,m;
ll ans=1;
int b[N],c[N],a[N],d[N],h[N];
int main()
{
cin>>n;
rep(i,2,n) scanf("%d",&b[i]);
rep(i,2,n) scanf("%d",&c[i]),c[i]-=b[i];
rep(i,0,30){
int t=1,cnt=0,flag=0;
rep(j,2,n){
int Or=b[j]>>i&1,And=c[j]>>i&1;
if(!t&&And||!Or&&t){
flag=1;break;
}
else if(t) t=And;
else t=Or;
}
if(!flag) cnt++;
flag=0;
t=0;
rep(j,2,n){
int Or=b[j]>>i&1,And=c[j]>>i&1;
if(!t&&And||!Or&&t){
flag=1;break;
}
else if(t) t=And;
else t=Or;
}
if(!flag) cnt++;
ans*=cnt;
}
cout<<ans;
return 0;
}
A-Ares, Toilet Ares
题意:
一场比赛有n道题,其中最简单的m道题你可以做出来,现在对于特定的某道题,你有k次机会获得该题的代码,每次获取 x i x_i xi行,每次获取的代码有 y z y\over z zy的概率是错的,求能做出几道题(答案对4933取模)
思路:
简单的概率论,注意对分母求逆元
AC代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define rep1(i,a,b) for(int i=a;i<b;i++)
#define pre(i,a,b) for(int i=a;i>=b;i--)
#define pre1(i,a,b) for(int i=a;i>b;i--)
#define pep(i,stl) for(auto i:stl)
#define INF 0x7fffffff
#define eps 1e-6
#define fi first
#define se second
#define pb push_back
#define debug(x) cout<<x<<endl
#define mem(a,b) memset((a),(b),sizeof(a))
const int mod=4933;
const double PI = acos(-1);
typedef double db;
#define pep(i,stl) for(auto i:stl)
const int N = 2e6+5;
int n,m,k,a,l;
int x,y,z,fenzi=1,fenmu=1;
bool b[N];
ll fastpow(ll x,ll y){
x%=mod;
ll ans=1;
while(y){
if(y&1) ans=ans*x%mod;
x=x*x%mod;
y>>=1;
}
return ans%mod;
}
int main() {
cin>>n>>m>>k>>a>>l;
while(k--){
cin>>x>>y>>z;
if(x) fenzi=fenzi*(z-y)%mod,fenmu=fenmu*z%mod;
}
cout<<(a%mod+fenzi*fastpow(fenmu,mod-2))%mod;
return 0;
}