首页 > 其他分享 >hey_left 17 Codeforces Round 817 (Div. 4)

hey_left 17 Codeforces Round 817 (Div. 4)

时间:2024-01-25 22:12:07浏览次数:31  
标签:17 cin int sum Codeforces long hey solve define

题目链接

A.

把标准字符串和输入字符串排序,看是否相等

#include <bits/stdc++.h>
using namespace std;

#define int long long
const int N=1e5+10;

void solve(){
    int n;cin>>n;
    string t;cin>>t;
    string s="Timur";
    sort(s.begin(),s.end());
    sort(t.begin(),t.end());
    if(s==t)cout<<"YES"<<'\n';
    else cout<<"NO"<<'\n';
}

signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    int hey_left=1;
    cin>>hey_left;
    while(hey_left--){
        solve();
    }
}

C.

因为每个人的n个是不同的,所以若一个字符串出现了多次,那么一定是多个人写的
可以记录下每个字符串是哪些人写的,根据人数计分

#include <bits/stdc++.h>
using namespace std;

#define int long long
const int N=1e5+10;

void solve(){
    int n;cin>>n;
    map<string,vector<int>>mp;
    string t;
    for(int i=1;i<=3;i++)
    for(int j=1;j<=n;j++){
        cin>>t;
        mp[t].push_back(i);
    }
    int s1=0,s2=0,s3=0;
    for(auto tmp:mp){
        if(tmp.second.size()==1){
            int id=tmp.second[0];
            if(id==1)s1+=3;
            else if(id==2)s2+=3;
            else if(id==3)s3+=3;
        }else if(tmp.second.size()==2){
           // cout<<tmp.first<<'\n';
            int id=tmp.second[0],index=tmp.second[1];
            if(id==1||index==1)s1+=1;
            if(id==2||index==2)s2+=1;
            if(id==3||index==3)s3+=1;
        }
    }
    cout<<s1<<' '<<s2<<' '<<s3<<' '<<'\n';
}

signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    int hey_left=1;
    cin>>hey_left;
    while(hey_left--){
        solve();
    }
}

D.

本来的贡献可以计算出来
每个位置若能改变方向,增加的贡献预处理出来
降序排序,再求前缀和
可以改变几个方向,就加上这个前缀和

#include <bits/stdc++.h>
using namespace std;

#define int long long
const int N=1e5+10;

bool cmp(int x,int y){
    return x>y;
}
void solve(){
    int n;cin>>n;
    string s;cin>>s;
    vector<int>v(n),pre(n);
    int sum=0;
    for(int i=0;i<s.size();i++){
        v[i]=max(i-0,n-1-i);
        if(s[i]=='L')v[i]-=i-0;
        else if(s[i]=='R')v[i]-=n-1-i;
        if(s[i]=='L')sum+=i-0;
        else if(s[i]=='R')sum+=n-i-1;
    }
    sort(v.begin(),v.end(),cmp);
    for(int i=0;i<n;i++){
        if(i==0)pre[i]=v[i];
        else pre[i]=pre[i-1]+v[i];
    }
    for(int i=1;i<=n;i++){
        cout<<sum+pre[i-1]<<' ';
    }
    cout<<'\n';
}

signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    int hey_left=1;
    cin>>hey_left;
    while(hey_left--){
        solve();
    }
}

E.

太强了,二维前缀和
平面直角坐标,天然的度量
O(1)找任意边长

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define YES cout<<"YES"<<endl
#define NO cout<<"NO"<<endl
typedef long long ll;
typedef pair<int,int> PII;
const ll mod=1e9+7;
const int INF=0x3f3f3f3f;
const int N = 1e5+10;
#define ios ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
int sum[1050][1050];
void solve()
{
    memset(sum,0,sizeof(sum));
    int n,q;
    cin>>n>>q;
    for(int i=1;i<=n;i++)
    {
        int h,w;
        cin>>h>>w;
        sum[h][w]+=h*w;
    }
    n = 1e3;
    for (int i = 1; i <= n; i ++) 
        for (int j = 1; j <= n; j ++) 
            sum[i][j] += sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1];    
    for(int i=1;i<=q;i++)
    {
        int h1,w1,h2,w2;
        cin>>h1>>w1>>h2>>w2;
        ll res=sum[h2-1][w2-1]-sum[h2-1][w1]-sum[h1][w2-1]+sum[h1][w1];
        cout<<res<<"\n";
    }
}
signed main()
{
    int t;
    cin>>t;
    while(t--)
    {
        solve();
    }
}
 

F.

dfs找连通块,若连通块大小大于3,标记,跳过
若等于3,因为我们按从上到下,从左到右搜的,所以4种情况我们最先搜到的那一个是已知的,判4种情况若有一种成立就可以

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
typedef priority_queue<int, vector<int>, less<int>> Q;
#define x first
#define y second
#define endl '\n'
#define ppb pop_back
#define pb push_back
#define pf push_front
#define YES cout << "YES" << endl
#define Yes cout << "Yes" << endl
#define yes cout << "yes" << endl
#define NO cout << "NO" << endl
#define No cout << "No" << endl
#define no cout << "no" << endl
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define mset(x, a) memset(x, a, sizeof(x))
#define rep(i, l, r) for (LL i = l; i <= (r); ++i)
#define per(i, r, l) for (LL i = r; i >= (l); --i)
const int N = 1e2 + 10, inf = 0x3f3f3f3f, mod = 998244353;
int n, m;
char g[100][100];
int b[N][N]; // 记录每个*有没有被判断过
bool check(int x, int y)
{
    int sum = 0;
    for (int i = -1; i <= 1; i++)
        for (int j = -1; j <= 1; j++)
            if (g[x + i][y + j] == '*')
                sum++;
    return sum == 3;
}
bool get(int x, int y)
{
    b[x][y] = 1;
    int sum = 1;
    if (g[x + 1][y - 1] == '*')
    {
        b[x + 1][y - 1] = 1;
        sum++;
    }
    if (g[x + 1][y] == '*')
    {
        b[x + 1][y] = 1;
        sum++;
    }
    if (g[x][y + 1] == '*')
    {
        b[x][y + 1] = 1;
        sum++;
    }
    if (g[x + 1][y + 1] == '*')
    {
        b[x + 1][y + 1] = 1;
        sum++;
    }
    return sum == 3;
}
void solve()
{
    int ok = 1;
    mset(g, 'a');
    mset(b, 0);
    cin >> n >> m;
    for (int i = 1; i <= n; i++)
        scanf("%s", g[i] + 1);
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= m; j++)
        {
            if (g[i][j] == '*' && b[i][j] == 0)
            {
                if (!get(i, j))
                    ok = 0;
            }
            if (g[i][j] == '*')
            {
                if (!check(i, j))
                    ok = 0;
            }
        }
    }
    if (ok)
        YES;
    else
        NO;
}
signed main()
{
#ifdef Xin
    freopen("in.in", "r", stdin);
    freopen("out.out", "w", stdout);
#endif
    int T = 1;
    cin >> T;
    while (T--)
        solve();
    return 0;
}

G.

即让所有数异或和为0
前n-3填1到n-3,第n-2和n-1随便填两个大数
在记录下奇数位的异或和与偶数位的异或和,第n个数就是两个数的异或

#include<bits/stdc++.h>
using namespace std;
int T,n,a[200005],v1,v2;
int main(){
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    cin>>T;
    for(;T--;){
        v1=0,v2=0;
        cin>>n;
        for(int i=1;i<=n-3;i++){
            a[i]=i;
            if(i&1)v1^=i;
            else v2^=i;
        }
        a[n-2]=998244353;
        a[n-1]=1000000007;
        if((n-2)&1)v1^=a[n-2];
        else v2^=a[n-2];
        if((n-1)&1)v1^=a[n-1];
        else v2^=a[n-1];
        a[n]=v1^v2;
        for(int i=1;i<=n;i++)cout<<a[i]<<" ";
        cout<<"\n";
    }
    return 0;
}

标签:17,cin,int,sum,Codeforces,long,hey,solve,define
From: https://www.cnblogs.com/wwww-/p/17988140

相关文章

  • CF1732F Clear the String
    题目传送门很明显的一道区间dp我们设\(dp_{i,j}\)表示清空\(i\)到\(j\)之间所有字母所需的最小操作次数紧接着任取一个\(k\)满足\(k\in(i,j]\)来分情况讨论:\[f_{i,j}=\min^j_{k=i+1}\left\{\begin{aligned}a_i=a_k\Rightarrowf_{i+1,k-1}+f_{k,j}\\f_{i+1,k-1}+f......
  • hey_left 16 Codeforces Round 827 (Div. 4)
    题目链接A.判最大的数是不是另外两个数的和#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintN=1e5+10;voidsolve(){inta,b,c;cin>>a>>b>>c;cout<<(max({a,b,c})==a+b+c-max({a,b,c})?"YES":"......
  • 17 位社区大咖寄语,Seata 进入 Apache 孵化器
    北京时间2023年10月29日,分布式事务开源项目Seata正式通过Apache基金会的投票决议,以全票通过的优秀表现正式成为Apache孵化器项目!根据Apache基金会邮件列表显示,在包含13个约束性投票(bindingvotes)和6个无约束性投票(non-bindingvotes)的投票全部持赞同意见......
  • P8659 [蓝桥杯 2017 国 A] 数组操作 题解
    题目链接:洛谷或者蓝桥杯或者C语言中文网几个OJ的AC记录:忘了哪个OJ的:洛谷:C语言中文网:蓝桥杯:emmmmmmm,好像每个OJ给的时限和空间还不一样,蓝桥杯官方还给了$3s$和$2G$,C语言中文网机子比较老可能,挺卡常的,开了个究极快读和指令集就过去了,也可以自己调下重构常数,偷懒......
  • Codeforces 1667E Centroid Probabilities
    这个连边方式就可以理解为\(1\)为根,点\(u\)的父亲\(fa_u\)满足\(fa_u<u\)。重心有不止一种表示法,考虑用“子树\(siz\ge\lceil\frac{n}{2}\rceil\)最深的点”来表示重心。令\(m=\lceil\frac{n}{2}\rceil\),\(f_i\)为节点\(i\)的\(siz\gem\)的方案数。考虑枚......
  • 17、std::move和移动语义详解
    概述std::move是C++标准库中的一个函数模板,用于将一个左值(左值引用)转化为右值引用,从而实现移动语义。移动语义是一种可以将资源(如内存)从一个对象转移到另一个对象的方式,而不是进行资源的复制。移动操作通常比复制操作更高效,对于大型的对象(如容器、字符串等)可以带来很大的......
  • Codeforces Round 920 (Div. 3)
    赛时过了A~E,表现分1738。感觉D~G都挺有意义拿出来说的。[D]VeryDifferentArray首先一个贪心的猜想是:如果A和B长度相同,那一个顺序一个逆序应该是最优的情况。思考下如何证明这个猜想。假如A和B的长度均为2,易证\(A_1\)<\(A_2\),\(B_1\)>\(B_2\)时最优......
  • 寒假生活指导17
    <template><divclass="carbon-quota-page"><!--页面标题--><h1>碳额度查询</h1><!--查询表单区域--><el-formv-if="!loading":model="form"ref="queryForm"la......
  • CodeForces 1667E Centroid Probabilities
    洛谷传送门CF传送门首先需要了解重心的三种定义:删掉一个点后剩下子树大小\(\le\frac{n}{2}\)的点\(\sum\limits_{i=1}^n\text{dis}(u,i)\)最小的点最深的\(sz_u\ge\left\lceil\frac{n}{2}\right\rceil\)的点这道题我们使用第三种定义,也就是要统计\(i\)为最......
  • HeyGen调研和实现
    ihaveadream.mp4一、自研流程图二、视频合成1、框架选择GeneFaceGeneFace对域外音频(如不同说话人、不同语种的音频)实现了更好的嘴唇同步和表现力。推荐您观看此视频,以了解GeneFace与之前基于NeRF的虚拟人合成方法的口型同步能力对比。您也可以访问我们的项目页面以了解......