又是自闭的一天。
A题
- 思路
如果加起来整体式合数的话,那么直接输出 n n n,否则的话,考虑把一个奇数去掉,为什么一定会有奇数。
如果没有奇数的话,最后和一定是个偶数——属于合数;所以必然有一个奇数,当一个素数减去一个奇数,那么必定是个偶数,即为合数。
- 代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+10,mod=1e9+7;
template<typename T>
void Debug(T x,string s){
cout<<s<<": "<<x<<endl;
}
#define PII pair<int,int>
#define x first
#define y second
#define PB push_back
void solve()
{
int n;cin>>n;
int px,sum = 0;
for(int i=1;i<=n;i++){
int tx;cin>>tx;
if(tx%2==1) px = i;
sum += tx;
}
bool flag = 1;
for(int i=2;i*i<=sum;i++){
if(sum%i==0){
flag = 0;break;
}
}
if(flag){
cout<<n-1<<endl;
for(int i=1;i<=n;i++){
if(i!=px) cout<<i<<" ";
}
cout<<endl;
}
else{
cout<<n<<endl;
for(int i=1;i<=n;i++){
cout<<i<<" ";
}
cout<<endl;
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("a.txt", "r", stdin);
freopen("aout.txt", "w", stdout);
#endif
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t;
cin >> t;
while (t--)
solve();
}
B题
- 思路
哎,太笨了,直接找到一个没有出现在 b 位置的数,让所有其他的点连在她下面就好了,想到这种极端的构造方式了,但是没有想到找一个不出现 b 位置的数,还是笨!!!
- 代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+10,mod=1e9+7;
template<typename T>
void Debug(T x,string s){
cout<<s<<": "<<x<<endl;
}
#define PII pair<int,int>
#define x first
#define y second
#define PB push_back
bool vis[N];
void solve()
{
int n,m;cin>>n>>m;
vector<int> vec[n+1];
for(int i=1;i<=n;++i) vis[i] = 0;
for(int i=1;i<=m;i++){
int a,b,c;
cin>>a>>b>>c;
vis[b] = 1;
}
int tx;
for(int i = 1;i<=n;i++){
if(!vis[i] ){
tx = i;break;
}
}
for(int i=1;i<=n;i++){
if(tx == i) continue;
else{
cout<<i<<" "<<tx<<endl;
}
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("a.txt", "r", stdin);
freopen("aout.txt", "w", stdout);
#endif
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t;
cin >> t;
while (t--)
solve();
}
- C题
- 思路
也很简单。
其实出现题目中的 “deteminable”,就是 a[i][j] 和 a[i-1][j+1] 同时是 ‘X’,这样的话,右边那个方块就没法确定是 ‘.’ 还是 ‘X’。每一列只要出现一个就不行,所以可以对于每次询问,可以用前缀和判断。如果这个区间和为 0 ,那么就可以,否则的话就不可以。 1 表示该列出现。
- 代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+10,mod=1e9+7;
template<typename T>
void Debug(T x,string s){
cout<<s<<": "<<x<<endl;
}
#define PII pair<int,int>
#define x first
#define y second
#define PB push_back
bool vis[N];
void solve()
{
int n,m;cin>>n>>m;
vector<vector<char> > vec(n+1,vector<char>(m+1));
for(int i = 1;i <= n;i ++){
for(int j = 1;j <= m;j ++){
cin>>vec[i][j];
}
}
vector<int> judge(m+1,0);
for(int j = 2;j <= m;j ++){
for(int i = 1;i < n;i ++){
if(vec[i][j]=='X'&&vec[i+1][j-1]=='X'){
judge[j] = 1;break;
}
}
}
vector<int> pre(m+3,0);
for(int i = 1;i <= m;i ++){
pre[i] = pre[i-1] + judge[i] ;
}
int q;cin>>q;
while(q--){
int l,r;cin>>l>>r;
// cout<<l<<" "<<r<<endl;
if(l == r){
cout<<"YES"<<endl;continue;
}
// cout<<pre[r]<<" "<<pre[l-1]<<endl;
//注意这里不是 pre[r]-pre[l-1],因为最左边一行一定是可以出去的。
if(pre[r]-pre[l]==0){
cout<<"YES"<<endl;
}
else{
cout<<"NO"<<endl;
}
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("a.txt", "r", stdin);
freopen("aout.txt", "w", stdout);
#endif
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t;
// cin >> t;
t = 1;
while (t--)
solve();
}