首页 > 其他分享 >1.4 SMU Winter 2023 Round #1 (Div.2)

1.4 SMU Winter 2023 Round #1 (Div.2)

时间:2023-01-07 20:23:20浏览次数:73  
标签:1.4 Winter int SMU ans ++ sum ll cout

[语言月赛202212] 不可以,总司令 思路:比较大小  

if(x>y)cout<<"NO";
    else if(x<y)cout<<"YES";
    else cout<<"equal probability";

 

[语言月赛202212] 计算  思路:n的各位数字和的值,平方,立方
 while(n){
        s+=n%10;
        n/=10;
    }
    cout<<s<<'\n'<<s*s<<'\n'<<s*s*s;

 

  拱猪计分 思路:先判断H,再判断D,S,最后判断C 关键点:

1. 集齐16张牌便可以加1000分

2. 集齐13张红桃加200分

3. 若所有红桃牌不在同一个人的手中,那么分值按照:

4. −50,−2,−3,−4,−5,−6,−7,−8,−9,−10,−20,−30,−40来计算。

5. 猪牌和羊牌分别为−100和100分

6. 集齐13张红桃、羊牌和猪牌,加500分

7. 若除了C10还有其他计分牌则将其他计分牌的分数*2

   
int n,sum[10005][17],number;
int Fs[17]={0,-50,-2,-3,-4,-5,-6,-7,-8,-9,-10,-20,-30,-40,-100,100};
char s;

//所有牌和为0则结束
int Tot=0,ans=0;
        memset(sum,0,sizeof(sum));
        for(int i=1;i<=4;i++){
            cin>>n;
            Tot+=n;
            for(int j=1;j<=n;j++){
                cin>>s>>number;
                if(s=='H')sum[i][number]=1;
                if(s=='S')sum[i][14]=1;
                if(s=='C')sum[i][16]=1;
                if(s=='D')sum[i][15]=1;
            }
        }
        if(Tot==0)return 0;

//ok判断h是否在一家
for(int i=1;i<=4;i++){
            int ok=1;
            ans=0;
            for(int j=1;j<=13;j++)
                if(sum[i][j]==0){
                    ok=0;
                    break;
                }
            if(ok){
                if(sum[i][14]&&sum[i][15])ans+=500;
                else ans+= 200 + ((sum[i][14]) ? 1 : 0) * Fs[14]+((sum[i][15])?1:0)*Fs[15];
                if(sum[i][16])ans*=2;
                if(ans > 0)printf("+%d ", ans);
                else printf("%d ", ans);
            }
            else{
                ok=1;
                for(int j=1;j<=15;j++)
                    if(sum[i][j]){
                        ok=0;
                        break;
                    }
                if(ok==1){
                    if(sum[i][16])printf("+50 ");
                    else printf("0 ");
                }
                else{
                    for(int j=1;j<=15;j++)ans+= ((sum[i][j]) ? 1 : 0)* Fs[j];
                    if(sum[i][16])ans*=2;
                    if(ans > 0)printf("+%d ", ans);
                    else printf("%d ", ans);
                }
            }
        }
cout<<'\n';
  [语言月赛202212] 数字口袋 思路:满足 1+2+...+i <=n 的最大前缀和,依次输出i
 for(int i=1;;++i){
       s+=i;
       if(s>n)break;
       cout<<i<<'\n';
    }

 

[语言月赛202212] 狠狠地切割(Easy Version)狠狠地切割(Hard Version) 思路:二分: 对b[ ]排序,使用二分查找,看a[1~n]是否在b[ ]中出现,存在表示该数变切割线,切割线前存在数,表示存在一个片段,若a[n]不为切割线,则片段加一

 

1 sort(b+1,b+m+1);
2 for(int i=1;i<=n;++i){
3 if(!binary_search(a[i])&&binary_search(a[i+1]))ans++;
4 }
5 if(!binary_search(a[n]))ans++;

 

  如何得到 npy 思路:dfs 分别求 s 和 t 到所有点的距离,同时记录方向,对于每个点,取距离较小的边,将方向与存的边比较
typedef long long ll;
const int N=6e5+5;
struct node{
    int u,v;
    ll w;
}e[N];
ll dis1[N],dis2[N],ed[N];
int ve[N],ne[N],h[N],idx=1,ans[N],ans1[N],ans2[N];//ans存编码

void add(int u,int v,ll w){
    ve[++idx]=v,ed[idx]=w,ne[idx]=h[u],h[u]=idx;
}

void dfs1(int x){
    for(int i=h[x];i;i=ne[i]){
        int t=ve[i];
        if(dis1[t])continue;
        dis1[t]=dis1[x]+ed[i];
        ans1[t]=(i^1)/2;//idx从2开始存,每一对相邻奇偶存的一条边,ans存储x->t边
        dfs1(t);
    }
}

void dfs2(int x){
    for(int i=h[x];i;i=ne[i]){
        int t=ve[i];
        if(dis2[t])continue;
        dis2[t]=dis2[x]+ed[i];
        ans2[t]=(i^1)/2;
        dfs2(t);
    }
}

int main(){
    int n,s,t;
    cin>>n>>s>>t;
    for(int i=1;i<n;++i){
        cin>>e[i].u>>e[i].v>>e[i].w;
        add(e[i].u,e[i].v,e[i].w);
        add(e[i].v,e[i].u,e[i].w);
    }
    dis1[s]=dis2[t]=1;
    dfs1(s),dfs2(t);
    ll res=0;
    for(int i=1;i<=n;++i){
        res+=min(dis1[i]-1,dis2[i]-1);
        if(i==s||i==t)continue;
        if(dis1[i]<dis2[i]){
            if(i==e[ans1[i]].u)ans[ans1[i]]=1;//从s和t开始dfs,实际路径相反
            else ans[ans1[i]]=2;
        }
        else{
            if(i==e[ans2[i]].u)ans[ans2[i]]=1;
            else ans[ans2[i]]=2;
        }
    }
    cout<<res<<'\n';
    for(int i=1;i<n;++i)cout<<ans[i];
    return 0;
}

 

  做不完的作业 思路:对于每个任务用时w,若在该天内完成能够满足时间要求,则完成该任务,否则该天剩余时间用来睡觉,再算出在能够完成该任务的情况下 所需全天睡觉的天数 l(最佳情况),即满足 x−w+sum+l⋅x≥(i+l)⋅x⋅p​/q (一天时间 − 将要完成的作业时间 + 当前总睡觉时间 + 天整天睡觉的总时长 ≥ 该天的 l 天后的要求总睡觉时长),若不满足则求 l 天的范围 l  ≥ ( q(sum+xw)pix​ ) / ( x(pq) )  (向上取整)  
void solve(){
    ll n,x,p,q,i=1,sum=0,t=0;//第i天,总睡觉时间sum,当天作业时间t
    cin>>n>>x>>p>>q;
    while(n--){
        ll w;
        cin>>w;
        if((x-t-w+sum)*q>=i*p*x&&x-t>w)t+=w;//做此任务能满足要求
        else{
            sum+=x-t;
            i++;
            ll l=ceil((q*(sum+x-w)-p*i*x)*1.0/(x*p-x*q));
            if(l>0){
                sum+=x*l;
                i+=l;
            }
            t=w;
        }
    }
    cout<<i;
}

 

 
毕业后 思路:不及格人数<=( E * 总人数 )* 科目数量,不及格人数<=总人数 的情况下,可保证全部人可毕业,不及格人数尽可能大的情况下E越大,找出最大不及格人数, 满足不及格人数能整除科目数量,即可求出E
 1 int main(){
 2     int a,b;
 3     cin>>a>>b;
 4     for(int i=b;;--i){
 5         if(i%a!=0)continue;
 6         int c=i/a;
 7         double d=double(c)/b;
 8         cout << fixed << setprecision(16) <<d;
 9         break;
10     }
11     return 0;
12 }

 

  语言月赛202212] 旋转排列 思路:将原序列分为两段
 1  for (int i = n ; i > 0; --i) {
 2         if (i <= n) {
 3             for (int k = i; k <= n; ++k) {
 4                 cout << a[k] << ' ';
 5             }
 6         }
 7         for (int j = 1; j < i; ++j)
 8             cout << a[j] << ' ';
 9         cout<<'\n';
10         if(a[i-1]==n)break;
11     }

 

  标题计数  思路:每一行满足1.第一个非空白字符为‘#’ 2.‘#’后至少一个空格 3.其后至少一个非空白字符
 1 for (int i = 0, j; i < n; i++)
 2 {
 3     getline(cin, s);
 4     j = 0;
 5     while (j < s.size()&&s[j]==' ')
 6         j++;
 7     if (j >= s.size()-1||s[j] != '#'||s[++j] !=' ')
 8         continue;
 9     while (j < s.size() && s[j] == ' ')
10         j++;
11     if (j >= s.size())
12         continue;
13     b++;
14 }

 

 

标签:1.4,Winter,int,SMU,ans,++,sum,ll,cout
From: https://www.cnblogs.com/bible-/p/17025973.html

相关文章

  • 1.6 SMU Winter 2023 Round #2 (Div.2)
    SMUWinter2023Round#2(Div.2)1760A-MediumNumber思路:排列后,输出第二大的数intmain(){intt,a[5];cin>>t;while(t--){for(inti=0;i......
  • 2023 winter training long round #2
    2023wintertraininglonground#2比赛后面写了一堆乐色。开场跟风写了A,B,L,然后看C,发现是简单dp。这时候看了D,是个字符串,先扔了(不会串题)E好像是个奇怪结论,......
  • 1.4
    1.4数组元素个数:intarr[]={};intsize=sizeof(arr)/sizeof(arr[0]); printf的特殊字符用法:%0d:将输出的前面补上0,直到占满指定列宽为止printf("%07d",32);打印......
  • HDMI1.4/2.0 Subsystem官方例程的建立
    HDMI1.4/2.0Subsystem官方例程的建立1、 项目背景明德扬(MDY)为某研究所研制的视频接口转换模块,该模块将HDMI视频转成LVDS7:1视频。视频输入接口采用的是HDMI4K输入,基于X......
  • HDMI1.4/2.0 Subsystem官方例程的建立
    HDMI1.4/2.0Subsystem官方例程的建立1、 项目背景明德扬(MDY)为某研究所研制的视频接口转换模块,该模块将HDMI视频转成LVDS7:1视频。视频输入接口采用的是HDMI4K输入,基于X......
  • HZNU Winter Trainning STL 补题
    2023.01.03HZNUWinterTrainningSTL补题CodeForces-4C题意:给你n个字符串,如果某个字符串出现过,则在这个字符串后面加上1,2,3,4....以此类推题解:利用map记录某个字符......
  • 2023.1.4
    昨天题难大家都差不多,今天就160倒数第二(还是策略问题,感觉都不会考试和调代码了。。。签完到就去写最难写的计算几何,最后才开t1,发现很简单,但是没什么时间了。最后写完calc......
  • 2022.1.4 营业日志
    感觉阳了之后没完全好啊,非常想睡觉。以后这个东西把三天放在一起吧,感觉每天都更有点多的(P3488[POI2009]LYZ-IceSkatesDescription给一张二分图,其中左边第\(i\)个点......
  • 闲话 23.1.4
    闲话截至本文撰写时,我多项式那篇已经写了15k了,而我甚至才刚介绍到分式分解今日推歌是《夜行者们》洛天依/闹闹丶!好今天又是水水水(杂题P5219计数\(n\)个点、最大......
  • 1.4 vp Codeforces Round #838 (Div. 2)
    A-DivideandConquer题意:给出序列a,设b为a中元素总和。你可以选择a中任意元素,将它除以二(向下取整)。问最少需要多少次可以使b为偶数思路:将a划分为奇偶两个集合。a中偶数......