#include<bits/stdc++.h>#define int long longusingnamespace std;constint N =1e6+7;constint mod =1e9+7;int t,n,m,k;int a[N];signedmain(){int t;
cin>>t;while(t--){
cin>>n;for(int i =0; i < n ; i ++){
cout<<6<<" ";}
cout<<endl;}return0;}
#include<bits/stdc++.h>#define int long longusingnamespace std;constint N =1e6+7;constint mod =1e9+7;int t,n,m,k;int a[N],b[N];signedmain(){int t;
cin>>t;while(t--){
cin>>n;
map<int,int> mp;
mp.clear();int flag =0;for(int i =0; i < n ; i ++){
cin>>a[i];
mp[a[i]]++;
flag = flag ||(mp[a[i]]>=2);}if(flag)
cout<<"YES"<<endl;else
cout<<"NO"<<endl;}return0;}
#include<bits/stdc++.h>#define int long longusingnamespace std;constint N =1e6+7;constint mod =1e9+7;int t,n,m,k;int a[104][105],b[105][105];int mark[105][105];signedmain(){int t;
cin>>t;while(t--){
cin>>n>>m;for(int i =0; i < n ; i ++){for(int j =0; j < m ; j ++){
cin>>a[i][j];}}for(int i =0; i < n ; i ++){for(int j =0; j < m ; j ++){if((i+j)%2){if(a[i][j]%2==0) a[i][j]++;}else{if(a[i][j]%2==1) a[i][j]++;}}}for(int i =0; i < n ; i ++){for(int j =0; j < m ; j ++){
cout<<a[i][j]<<" ";}
cout<<endl;}}return0;}
#include<bits/stdc++.h>#define int long longusingnamespace std;constint N =1e6+7;constint mod =1e9+7;int t,n,m,k;int a[N],b[N];struct node{int x,y,z;node(){};node(int i,int j,int k):x(i+1),y(j+1),z(k+1){};}res[N];voidsolve(){int cnt =0;for(int i =0; i+2< n ; i +=2){
res[cnt ++]=node(i,i+1,i+2);}for(int i =0; i+2< n ; i +=2){
res[cnt ++]=node(i,i+1,n-1);}
cout<<cnt<<endl;for(int i =0; i < cnt ; i ++){
cout<<res[i].x<<" "<<res[i].y<<" "<<res[i].z<<endl;}}signedmain(){int t =1;// cin>>t;while(t--){
cin>>n;for(int i =0; i < n ; i ++) cin>>a[i];if(n&1){
cout<<"YES"<<endl;solve();}else{int tmp =0;for(int i =0; i < n; i ++) tmp ^= a[i];if(tmp !=0){
cout<<"NO"<<endl;continue;}
cout<<"YES"<<endl;solve();}}return0;}
E. Yurii Can Do Everything
题意:一个数组,然后要找出所以 Good 子串的数量,定义是子串中 左右端点的异或值 等于 子串中所有数的和。
思路:sum(l+1,r−1) ≤ 2⋅max(al,ar),因为异或操作,不可能产生进位。然后设现在 al是最大值。扫描一遍右端点。数出符合条件的个数。 关键在于跳出的条件。因为已经假设了 al是最大值。那么当 sum > al *2 时就跳出循环了。 剩下的会在枚举右端点时枚举到。 让右端点作为最大值。并且可能会枚举到重复的区间。加一个set去重。
AC代码:
#include<bits/stdc++.h>#define int long long#define mk make_pairusingnamespace std;constint N =1e6+7;constint mod =1e9+7;int t,n,m,k;int a[N];int sum[N];
set<pair<int,int>> st;signedmain(){int t =1;// cin>>t;while(t--){
cin>>n;for(int i =1; i <= n ; i ++){
cin>>a[i];
sum[i]= sum[i-1]+ a[i];}for(int i =1; i <= n ; i ++){for(int j = i+2; j <= n ; j ++){int x = a[i]^a[j];int ss = sum[j-1]-sum[i];if(ss > a[i]*2)break;if(x == ss){
st.insert(mk(i,j));}}}for(int i = n; i >=1; i --){for(int j = i-2; j >=1; j --){int x = a[i]^a[j];int ss = sum[i-1]-sum[j];if(ss > a[i]*2)break;if(x == ss){
st.insert(mk(j,i));}}}
cout<<st.size()<<endl;}return0;}
A. Specific Tastes of Andre题意:给一个n,要求构造一个数组,需要让数组每个子串的和都能整除子串的长度。思路:显然。只要让所有数都一样不就完了吗。子串和 = 子串长度*x,x任取。AC代码:#include <bits/stdc++.h>#define int long longusing namespace std;const int N = 1e6+7;const int mod = 1e9+7;int t,n,m,k;int a[N];si