T1 王国比赛(kingdom)
开一个大小为 n 的桶 cnt[],cnt[i] 表示第 i 题判断对的人数
AC code:
#include <bits/stdc++.h>
using namespace std;
int n=0,m=0;
int cnt[1000005]={0};
int main(){
scanf("%d%d",&n,&m);
int x=0;
for(int k=1;k<=m;k++){
for(int i=1;i<=n;i++){
scanf("%d",&x);
if(x==1)cnt[i]++;
}
}
bool cmp;
int ans=0;
for(int i=1;i<=n;i++){
scanf("%d",&x);
cmp=(cnt[i]>m-cnt[i]);
if(x==cmp)ans++;
}
printf("%d\n",ans);
return 0;
}
T2 数学游戏(math)
#include <bits/stdc++.h>
using namespace std;
#define ull unsigned long long
ull x=0,z=0;
ull line=0,k=0;
long double d=0;
int t=0;
int main(){
scanf("%d",&t);
while(t--){
scanf("%llu%llu",&x,&z);
if(z%x!=0)printf("-1\n");
else{
line=z/x;k=x;k*=x;
d=sqrt(__gcd(k,line)*1.0);
if(floor(d)!=d)printf("-1\n");
else printf("%llu\n",z/x/((ull)d));
}
}
return 0;
}
T3 字符串(string)
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
using namespace std;
const int mod=1000000007;
int t,n,m,dp[2][405][405],ans,now,val;
string a,b;
int main()
{
cin>>t;
while(t--)
{
cin>>n>>m>>a>>b;
a=" "+a;
b=" "+b;
int len=0;
bool flag=1;
val=1;
for(int i=1;i<=n;++i)
if(a[i]=='-')
{
val=(val<<1)%mod;
if(!--len)
{
flag=0;
break;
}
}
else
++len;
if(!flag||len!=m)
{
puts("0");
continue;
}
memset(dp,0,sizeof dp);
dp[0][m][0]=1;
now=0;
len=m;
ans=0;
for(int i=n;i>=1;--i)
{
now^=1;
for(int j=0;j<=m;++j)
for(int k=0;k<=n;++k)
dp[now][j][k]=0;
if(a[i]=='-')
{
++len;
val=1ll*val*((mod+1)>>1)%mod;
for(int j=1;j<=min(m,len);++j)
for(int k=0;k+j<=len;++k)
{
dp[now][j][k]=dp[now^1][j][k];
if(k)
dp[now][j][k]=(dp[now][j][k]+dp[now^1][j][k-1])%mod;
}
}
else
{
--len;
for(int j=0;j<=min(m,len);++j)
for(int k=0;k+j<=len;++k)
{
dp[now][j][k]=dp[now^1][j][k+1];
if(!k&&j!=m&&a[i]==b[j+1])
dp[now][j][k]=(dp[now][j][k]+dp[now^1][j+1][k])%mod;
}
}
ans=(ans+1ll*val*dp[now][0][0]%mod)%mod;
}
cout<<ans<<'\n';
}
return 0;
}