第一题
算法:无
解决方法:暴力
解决思路:不存在有一列全是1就好
注意点:数组用char类型
#includeusing namespace std; char cell[2][200]; int main() { int t; //freopen("in.txt","r",stdin); bool falg=true; for(cin>>t;t;t--) { int n; falg=true; cin>>n; for(int i=0;i<2;i++) { for(int j=0;j >cell[i][j]; } } for(int i=0;i 第二题
算法:无
解决方法:暴力
解决思路:只要有两列数满足两点要求就好
1.两列数的1的数量都要大于等于n/2
2.两列数的1的是互补的也就是说单拿出这两列放在一起组成一个n行2列的二维数组后这个二维数组不存在有一行全为0
注意点:遍历操作#includeusing namespace std; int main() { int t; int n; bool no=1; int a[2000][5]; //freopen("in.txt","r",stdin); for(cin>>t;t;t--) { no=1; cin>>n; for(int i=0;i >a[i][j]; } } for(int i=0;i<5;i++) { for(int j=0;j<5;j++) { if(j==i) continue;//遍历同一排是无效的 int con1=0,con2=0,total=0; for(int k=0;k =n/2&&con2>=n/2&&total==n) { no=0; } } } if(no) { cout<<"NO"< 第三题
算法:无,可能用到了数学
解决方法:公式推导
解决思路:得到了a[i]和能和他配对的x的关系利用key-value对应的map来做
注意点:不要用暴力,会超时(test7)#include#define maxn 1000000 using namespace std; int t; int n; long long a[maxn]; map m; int main() { cin>>t; while(t--) { m.clear(); cin>>n; long long s=0; for(int i=0;i >a[i]; s=s+a[i]; } long long ans=0; for(int i=0;i 第四题
算法:无,用到了高中数据的排列组合
解决方法:公式推导
解决思路:n个问题任取三个组成题集,总数C(n,3),然后排除所有不符合题目中两个要求的题集#includeusing namespace std; int main() { long long t,n; int u,v; long long a[200010],b[200100],sa[200020],sb[200010]; for(cin>>t;t;t--) { cin>>n; for(int i=0;i 画个重点,这题我没见过尤其是
ans=ans-(sa[a[i]]-1)*(sb[b[i]]-1);
看大佬的代码写的E题是DP,明天和一个并查集一起尝试一下。



