SDUT 2021 Winter Individual Contest - G

74 篇文章 12 订阅
48 篇文章 0 订阅

A - Basketball One-on-One

题目链接

答案:

#include <iostream>
#include<bits/stdc++.h>
#define ll long long
#define INF 0x3f3f3f3f
const int mod = 10;
const int N = 1e5 + 10;
const int M = 1111;
using namespace std;

void solve(){
    ll sum1=0;
    ll sum2=0;
    string s;
    cin>>s;
    ll len=s.length();
    for(ll i=0;i<len;i+=2){
        if(s[i]=='A') sum1+=s[i+1]-'0';
        if(s[i]=='B') sum2+=s[i+1]-'0';
        if(max(sum1,sum2)>=11&&abs(sum1-sum2)>=2){
            if(sum1>sum2) puts("A");
            else puts("B");
            break;
        }
    }
}

int main()
{
    solve();
    return 0;
}

C - Convoy

题目链接

答案:

#include <iostream>
#include<bits/stdc++.h>
#define ll long long
#define INF 0x3f3f3f3f
#define R_Inf 1e10
#define PII pair<int,int>
#define PLL pair<ll,ll>
#define pb push_back
const int mod = 7;
const int N = 2e4 + 10;
const int M = 11;
using namespace std;

int dp[N];
int n,k;
ll l,r;

ll judge(ll mid){
    ll sum=0;
    ll peo=0;
    for(ll i=1;i<=n;i++){
        if(sum>=k) break;
        if(dp[i]<=mid){
            peo+=4;
            peo+=(mid-dp[i])/(2*dp[i])*4;
            sum++;
        }
    }
    if(peo>=n-sum) return true;
    return false;
}

void erfen(){
    l=1;
    r=R_Inf;
    ll mid;
    while(l<r){
        mid=(l+r)>>1;
        if(judge(mid)) r=mid;
        else l=mid+1;
    }
    cout<<l<<endl;
}

void solve(){
    cin>>n>>k;
    for(ll i=1;i<=n;i++){
        cin>>dp[i];
    }
    sort(dp+1,dp+1+n);
    erfen();
}

int main()
{
    solve();
    return 0;
}

F - Dragon Ball I

题目链接

答案:

#include <iostream>
#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define INF 0x3f3f3f3f3f3f3f3f
#define PII pair<int,int>
#define PLL pair<ll,ll>
#define pb push_back
const int mod = 7;
const int N = 2e5 + 10;
const int M = 11;
using namespace std;

struct node{
    ll next;
    ll w;
};

ll n,m;
ll way[M];
ll vis[M];
ll dis[M][N];
vector<node> dp[N];

void _clear(ll key){
    for(ll i=1;i<=n;i++){
        dis[key][i]=INF;
    }
}

void Dijkstra(ll key,ll pos){
    _clear(key);
    priority_queue<PLL,vector<PLL>,greater<PLL> >q;
    dis[key][pos]=0;
    q.push(PLL(0,pos));
    while(!q.empty()){
        PLL p=q.top();
        q.pop();
        ll x=p.first;
        ll y=p.second;
        if(x>dis[key][y]) continue;
        for(ull i=0;i<(ll)dp[y].size();i++){
            node np=dp[y][i];
            if(dis[key][np.next]>dis[key][y]+np.w){
                dis[key][np.next]=dis[key][y]+np.w;
                q.push(PLL(dis[key][np.next],np.next));
            }
        }
    }
}

void init(){
    for(ll i=0;i<8;i++){
        vis[i]=i;
    }
}

void add_edge(int u,int v,int t){
    node np;
    np.next=v;
    np.w=t;
    dp[u].pb(np);
}

void solve(){
    cin>>n>>m;
    for(ll i=1;i<=m;i++){
        ll u,v,t;
        cin>>u>>v>>t;
        //node np;
        add_edge(u,v,t);
        add_edge(v,u,t);
    }
    for(ll i=1;i<=7;i++){
        cin>>way[i];
        Dijkstra(i,way[i]);
    }
    ll ans=INF;
    init();
    ll dist;
    do{
        dist=dis[vis[7]][1];
        for(ll i=2;i<8;i++){
            dist+=dis[vis[i-1]][way[vis[i]]];
        }
        ans=min(dist,ans);
    }while(next_permutation(vis+1,vis+8));
    if(ans==INF) puts("-1");
    else cout<<ans<<endl;
}

int main()
{
    solve();
    return 0;
}

H - Farming Mars

题目链接

答案:

#include <iostream>
#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define INF 0x3f3f3f3f3f3f3f3f
#define PII pair<int,int>
#define PLL pair<ll,ll>
#define pb push_back
const int mod = 7;
const int N = 1e5 + 10;
const int M = 111;
using namespace std;

int n,m;
char s[M];
map<int,int>mp;
int pos;
int vis[N];
int num[N];
int dp[N];

void solve(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>s;
        int len=strlen(s);
        int key=0;
        for(int j=0;j<len;j++){
            if(s[j]!='.') key=key*10+s[j]-'0';
        }
        if(!mp[key]){
            mp[key]=++pos;
            vis[pos]=key;
        }
        num[i]=mp[key];
    }
    int l,r;
    for(int i=0;i<m;i++){
        cin>>l>>r;
        int tot=(r-l+1)/2+1;
        bool flag=0;
        for(int j=l;j<=r;j++){
            dp[num[j]]++;
            if(dp[num[j]]>=tot) flag=1;
        }
        if(flag) puts("usable");
        else puts("unusable");
        for(int j=l;j<=r;j++){
            dp[num[j]]--;
        }
    }
}

int main()
{
    solve();
    return 0;
}

I - Soft Passwords

题目链接

答案:

#include <iostream>
#include<bits/stdc++.h>
#define ll long long
#define INF 0x3f3f3f3f
const int mod = 10;
const int N = 1e5 + 10;
const int M = 1111;
using namespace std;

void solve(){
    string s1;
    string s2;
    cin>>s1>>s2;
    int len1=s1.length();
    int len2=s2.length();
    bool flag=0;
    bool f1=0;
    bool f2=0;
    if(len1==len2){
        if(s1==s2) flag=1;
        if(flag) puts("Yes");
        else{
            for(int i=0;i<len1;i++){
                if(s1[i]>'9'&&s2[i]>'9'){
                    if(abs(s1[i]-s2[i])==abs('a'-'A')) continue;
                    else f1=1;
                }
                else{
                    if((s1[i]>='0'&&s1[i]<='9')&&(s2[i]>='0'&&s2[i]<='9')){
                        if(s1[i]==s2[i]) continue;
                        else f1=1;
                    }
                    else f1=1;
                }
            }
            if(!f1) puts("Yes");
            else puts("No");
        }
    }
    else if(len1==len2+1){
        if(s1[0]!=s2[0]){
            if(s1[0]>='0'&&s1[0]<='9'){
                for(int i=1;i<len1;i++){
                    if(s1[i]!=s2[i-1]) f2=1;
                }
                if(!f2) puts("Yes");
                else puts("No");
            }
            else puts("No");
        }
        else{
            if(s1[len1-1]>='0'&&s1[len1-1]<='9'){
                for(int i=0;i<len2;i++){
                    if(s1[i]!=s2[i]) f2=1;
                }
                if(!f2) puts("Yes");
                else puts("No");
            }
            else puts("No");
        }
    }
    else puts("No");
}

int main()
{
    solve();
    return 0;
}

L - Umm Code

题目链接

答案:

#include <iostream>
#include<bits/stdc++.h>
#define ll long long
#define INF 0x3f3f3f3f
const int mod = 7;
const int N = 1e5 + 10;
const int M = 11;
using namespace std;

bool judge(string s){
    int len=s.length();
    for(int i=0;i<len;i++){
        if(s[i]>='A'&&s[i]<='Z') return false;
        if(s[i]>='0'&&s[i]<='9') return false;
        if(s[i]!='u'&&s[i]!='m'&&s[i]>='a'&&s[i]<='z') return false;
    }
    return true;
}

int vis[M];

void solve(){
    string s;
    string str;
    while(cin>>s){
        if(judge(s)) str+=s;
    }
    vis[0]=1;
    for(int i=1;i<9;i++){
        vis[i]=2*vis[i-1];
    }
    int len=str.length();
    int pos=6;
    char key=0;
    for(int i=0;i<len;i++){
        if(str[i]=='u') key+=vis[pos];
        else if(str[i]!='m') continue;
        if(!pos) {
            cout<<key;
            key=0;
        }
        pos=(pos+6)%mod;
    }
    cout<<endl;
}

int main()
{
    solve();
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值