战况:VP,1、2水题,3题一开始WA了,居然没有想到用快速幂,后来看了题解会了,T4没看。目前ABC已补。缺D。
T1: A - Addition and Subtraction Easy
题意:求A+B A-B问题,输入两个数和操作符,求出结果
思路:
代码:
#include <iostream>
using namespace std;
int a,b;
char op;
int main(){
cin>>a>>op>>b;
if(op=='+') cout<<a+b;
else cout<<a-b;
return 0;
}
T2:B - Contest with Drinks Easy
题意:n个题目,分别需要Ti时间来解答;m个饮料,喝下会使得某题时间变成Pi;需要计算选择每个饮料后的总时间。
思路:数据范围 [ 1 − 100 ] [1 -100] [1−100],可先求出所有题的解题时间和,然后在计算每种饮料时,减去该饮料所作用的题目的时间,加上该饮料作用后的时间
时间复杂度: O ( n ) O(n) O(n)
代码:
#include <iostream>
using namespace std;
const int N=110;
int t[N];
int sum;
int n,m;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>t[i];
sum+=t[i];
}
cin>>m;
while(m--){
int i,v;
cin>>i>>v;
cout<<sum-t[i]+v<<endl;
}
return 0;
}
T3:C - Lining Up
题意:n个人编号1-n站成一排,每个人左边的人数和右边的人数的差的绝对值为Ai,求可能的站的方案数的个数;n范围1e5。方案数要取模1e9+7,没有这样的方案就输出0。
思路: 看了一下样例,感觉找到了规律啊:
1)如果n是奇数的话,那么一定有一个0(也就是站在中间),2,2,4,4,…,n-1,n-1,满足的话方案数为2^(n-1)/2
2)如果n是偶数的话,那么一定有1,1,3,3,5,5,n-1,n-1,满足的话方案数为2^n/2.不满足以上条件则为0
因为数可能会很大,所以要用到快速幂(一开始没用就WA了4个点了)
代码:
#include <iostream>
#include <cmath>
using namespace std;
int mod=1e9+7;
typedef long long LL;
const int N=1e5+10;
int n, b[N];
int qmi(int a, int k,int p){
int res=1;
while(k){
if(k&1) res=(LL)res*a%p;
k>>=1;
a=(LL)a*a%p;
}
return res;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
int x;
cin>>x;
b[x]++;
}
if(n==1){
if(b[1]!=0) cout<<0;
else cout<<1;
return 0;
}
if(n%2==0){
bool is_ok=true;
for(int i=0;i<=n-1;i++)
{
if(i%2==0)
{
if(b[i]!=0){
is_ok=false;
break;
}
}
else{
if(b[i]!=2){
is_ok=false;
break;
}
}
}
if(!is_ok) cout<<0;
else cout<<qmi(2,n/2,mod);
}else{
bool is_ok=true;
for(int i=0;i<=n-1;i++)
{
if(i==0){
if(b[i]!=1){
is_ok=false;
break;
}
}
else{
if(i%2==0){
if(b[i]!=2){
is_ok=false;
break;
}
}else{
if(b[i]!=0){
is_ok=false;
break;
}
}
}
}
if(!is_ok) cout<<0;
else cout<<qmi(2,(n-1)/2,mod);
}
return 0;
}
T4- D - Xor Sum
TBD
题意:
思路:
代码: