首页 > 其他分享 >2024 (ICPC) Jiangxi Provincial Contest -- Official Contest

2024 (ICPC) Jiangxi Provincial Contest -- Official Contest

时间:2024-07-31 21:11:11浏览次数:12  
标签:Provincial Contest -- auto long int solve 质因数 define

D. Magic LCM

\(1.当我们在模拟样例1时,我们发现当最后为1,2, 2, 10 ,20时和最大\)
\(模拟样例3时,我们发现当最后为,1,1,6,6,36,540时和是最大\)
\(样例2无需修改加起来就是最大的。\)

\(2.我们发现,最后的序列每一个数都是后面的质因子,那么本质上,求最大的和,就是\)
\(移动这些质因子幂数(比如2^2,3^2)到其他数相乘,而一个质因子幂数可以移动到另一个数\)
\(的条件是,它们之间有不同的质因子。\)

\(3.我们使用一个二维数组,每行存的是对应质因子的幂数,那么不同行的相同位置,其实\)
\(就\color{red}{确保了,有不同质因子的这个条件},\)\(举个例子:样例3\)

\[ 对所有的数分解质因数,并存入相应的数时有效的数组(从大到小排序)为 \]

\[2:2,2,4,4 \]

\[3:27,9,3,3 \]

\[5:5\quad\quad\quad \]

\(4.那么对应的位置相乘起来,便是每个数的最优贡献。但是还要注意,假如6个数,质因子对应的幂数最多有4个,那么剩余两个数最后就是1。\)

总结:对这个几个数分解质因数--->存入对应的质因数的幂数--->排序后对应位置相乘--->加上剩余的1--->过程和结果的取模

/**   - swj -
   *         
      />_____フ
      |  _  _|
      /`ミ _x ノ
     /      |
    /   ヽ   ?
 / ̄|   | | |
 | ( ̄ヽ__ヽ_)_)
 \二つ
 
**/
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
typedef pair<int,int> pii;
#define x first
#define y second
#define all(v) v.begin(),v.end()
#define ull unsigned long long
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};
#define mod 998244353
 int n;
bool vis[1010];
vector<int>pri;//放1000以内的质数,大于1000的质数直接加到结果就行,因为最大数1e6。
void olas()//线性筛素数法
{
    for(int i=2;i<=1005;i++)
    {
        if(!vis[i]) pri.push_back(i);
        for(auto v:pri)
        {
            if(i*v>1005) break;
            vis[i*v]=1;
            if(i%v==0) break;
        }
    }
}

vector<int>v[1000010];//存每种质数对应的数比如质因数2 存4 8 16 质因数3存3 9 27
set<int>se;//存共出现了多少种质数,方便后续的遍历


void get(int x)//用来把每个数分解
{
    for(auto t:pri)
    {
        if(x<t) break;
        if(x%t==0) {
            int temp=1;
          
          while(x%t==0){
            temp*=t;
            x/=t;
         }
         v[t].push_back(temp);//存质因子对应次幂的数
         se.insert(t);
        }
    }
    //大于1000的质数直接放进来就可以
    if(x>1){
        v[x].push_back(x);
        se.insert(x);
    }
    
    
}


void solve()
{
    cin>>n;
    for(int i=0;i<n;i++)
    {
        int x; cin>>x;
        get(x);
    }
    
    int maxx=0,mk=0;//maxx是存质因数对应数数组里的最大长度,mk标记最大长度质因数
    
    for(auto i:se){//寻找maxx与mk
        if((int)v[i].size()>maxx) maxx=v[i].size(),mk=i;
        sort(v[i].begin(),v[i].end(),greater<int>());//从大到小排序
    }
    
    for(auto i:se)
    {
        if(i==mk) continue;//把其他可以加的质因数幂次数加到这个数组里,所以这个数组不操作
        for(int j=0;j<v[i].size();j++)
        {
            v[mk][j]=v[mk][j]*v[i][j]%mod;//对应位置相乘比如27 9 3 3
        }                               //              和4  2 4 4
        
    }
    
    int ans=n-maxx;//质数因子移动的过程结束后,n-maxx个数是1
    for(auto t:v[mk]) ans=(ans+t)%mod;//这里不是+= 是=
    for(auto t:se) v[t].clear();
    se.clear();
    cout<<ans<<endl;
}

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

C. Liar
最多可以有n-1个人说的是实话,因为1个说假话的人的这个数据可能可以直接弥补n-1个人和s的差值

/**   - swj -
   *         
      />_____フ
      |  _  _|
      /`ミ _x ノ
     /      |
    /   ヽ   ?
 / ̄|   | | |
 | ( ̄ヽ__ヽ_)_)
 \二つ
 
**/
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
typedef pair<int,int> pii;
#define x first
#define y second
#define all(v) v.begin(),v.end()
#define ull unsigned long long
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};
#define mod 998244353




signed main()
{
    int n,s; cin>>n>>s;
    
    int sum=0;
    for(int i=0;i<n;i++)
    {
      int x;        
      cin>>x;
        sum+=x;
    }
    
    if(sum==s) cout<<n;
    else cout<<n-1;
    
}


G. Multiples of 5
一个数是不是5的倍数,只取决于最后一位,11的任意次方的最后一位为1,每个进制位上的数字,实际上代表的是最后一位有多少个1,那么只需要计算出所有位置上加起来的数字和是不是5的倍数即可,注意A代表的是10

/**   - swj -
   *         
      />_____フ
      |  _  _|
      /`ミ _x ノ
     /      |
    /   ヽ   ?
 / ̄|   | | |
 | ( ̄ヽ__ヽ_)_)
 \二つ
 
**/
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
typedef pair<int,int> pii;
#define x first
#define y second
#define all(v) v.begin(),v.end()
#define ull unsigned long long
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};
#define mod 998244353
void solve()
{
    int n; cin>>n;
    int sum=0;
    for(int i=0;i<n;i++)
    {
        int a;
        string b;
        cin>>a>>b;
        int a1,b1;
        if(b=="A") b1=10;
        else b1=stoi(b);
        sum+=a*b1;
    }
    
    if(sum%5==0) cout<<"Yes";
    else cout<<"No";
    cout<<endl;
    
    
}

signed main()
{
    int t=1; cin>>t;
    while(t--)
    {
        solve();
    }
}

Magic Mahjong
1.十三orphans就是:取满对应的13个,剩余一个也来自这十三种的一种,那么使用map标记,大小对应13,并且有一个元素的数量是2即可
2.七对就是:对应的种类中,每种取2张,取7种即可

/**   - swj -
   *         
      />_____フ
      |  _  _|
      /`ミ _x ノ
     /      |
    /   ヽ   ?
 / ̄|   | | |
 | ( ̄ヽ__ヽ_)_)
 \二つ
 
**/
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
typedef pair<int,int> pii;
#define x first
#define y second
#define all(v) v.begin(),v.end()
#define ull unsigned long long
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};
#define mod 998244353
void solve()
{
    map<string,int>fi;
    vector<string>v={"1z","2z","3z","4z","5z","6z","7z",
        "1p","9p","1s","9s","1m","9m"
    };
    for(auto t:v){
        fi[t]=1;
    }
    
    
    vector<string>ve;
    string s; cin>>s;   
    for(int i=0;i<s.size();i+=2)
    {
        string sb;
        sb+=s[i];
        sb+=s[i+1];
        ve.push_back(sb);
    }
    map<string,int>mp;
    for(auto t:ve) mp[t]++;
    
    int flag=0;
    if(mp.size()==13){
        for(auto t:mp){
            if(fi[t.x]==0){
                cout<<"Otherwise";
                flag=1;
                break;
            }
        }
        if(!flag) cout<<"Thirteen Orphans";
        
    }else 
        
    if(mp.size()==7)
    {
        for(auto t:mp){
            if(t.y!=2){
                cout<<"Otherwise";
                return ;
            }
        }
        cout<<"7 Pairs";
        
    }

    else cout<<"Otherwise";
   
    cout<<endl;
    
    
}

signed main()
{
    int t=1; cin>>t;
    while(t--)
    {
        solve();
    }
}

L. Campus

标签:Provincial,Contest,--,auto,long,int,solve,质因数,define
From: https://www.cnblogs.com/swjswjswj/p/18334024

相关文章

  • kafka实际应用
    JavaMQ在实际业务场景中需要注意的问题消息丢失:发送方丢失:未存储到kafka,由于leader切换导致的丢失消费方丢失:拉取到消息提交后尚未实际消费完成即异常了,导致拉取到的消息没有实际消费重复消费:多个消费者消费同一partition提交时覆盖问题导致的重复顺序消费:partit......
  • 常见的滤波法(上)
    常见的滤波法(上)滤波处理既适用于模拟信号也适用于数字信号。在模拟信号处理中,滤波通常通过模拟电子电路实现;在数字信号处理中,则可以通过软件算法实现。滤波处理在信号处理中扮演着举足轻重的角色。通过滤波处理,我们可以改善信号的质量、提取有用的信息、提高信号的信噪比和平滑......
  • Django模板、模版语言和静态文件
    1.templates模板(html)在app目录下创建一个templates目录,用于存放网页模板利用url返回网页点击查看代码defuser_list(request):returnrender(request,"user_list.html");输入url地址时,会去app目录下的templates目录下寻找名为user_list的HTML文件(根据app注册顺......
  • 中山集训 day 1 day 3 模拟赛补题
    Round1A模拟即可。赛场上的写法我自认为写的挺好的。把所有的in替换成outans可以得到的所有串预处理出来,然后和其他原来的串判一下相等即可。Round1B很容易写错的题目。需要意识到\(dp_{\{\}}=x\),如果\(x\)的值更小的话,可以考虑将本来设为dp状态的四元组中的某......
  • 代码随想录算法训练营第55天 | 图论岛屿+水流
    孤岛的总面积https://kamacoder.com/problempage.php?pid=1173代码随想录https://www.programmercarl.com/kamacoder/0102.沉没孤岛.html102.沉没孤岛https://kamacoder.com/problempage.php?pid=1174代码随想录https://www.programmercarl.com/kamacoder/0102.沉没孤岛.......
  • html学习
    1、前期准备1、语法规范1、所有的标签都必须包含在开始标签结束标签,里面都是成对出现的,但是有些标签是单标签,,但是单标签非常的少2、标签关系包含关系就是嵌套的关系(父子关系),html包含了head这个标签并列关系head和body是并列关系3、结构标签html标签是......
  • 杂题合集
    P1437敲砖块如果我们选择了一个点那么以它为顶点的直角指向左上角的等腰直角三角形中的所有点都应该被选定。那也就是说最后的图形是若干的直角三角形框住的元素的权值和。我们考虑一列一列考虑最后的图形,发现前一列的长度小于等于当前列的长度加一,观察发现这是充要的,用这个性......
  • 小白程序员也要对世界进行第一次的呐喊!
    身为程序员对世界的第一声呐喊——HelloWorld!新建一个文件夹新建一个目录,并将其命名为Hello.java(关键一步)注意!文件类型显示的是java文件才成功(文件的后缀要改为java)双击文件,开始编写(本人使用的是Notepad++进行编写)输入图片中的代码(全部要用英文输入法输入)class后面的......
  • 注册可用,也可独立部署的政采云管理系统来了
    一剑政采云管理系统介绍一、系统概述一剑政采云管理系统是一款专为政府采购供应商量身打造的全方位、高效能管理平台。二、特色功能亮点注册即可用,快速上手:用户无需复杂配置,简单注册即可立即体验系统核心功能。直观的操作界面和详尽的使用指南,让即便是初次接触的用户也能迅速......
  • docker常用的使用方法
    docker如何退出进入的容器?要退出Docker容器的shell环境可以按以下步骤操作:在容器shell状态下,按下键盘上的Ctrl和P键。2然后按下Ctrl和Q键。这将使您退出容器的shell环境,但不会停止容器的运行。您将返回到宿主机的shell终端,而容器将继续在后台运行。如果......