Codeforces Round 749 (Div. 1 + Div. 2, based on Technocup 2022 Elimination Round 1)

又是自闭的一天。

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();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯狂的码泰君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值