1. 程式人生 > 實用技巧 >【杭電多校4】2020 Multi-University Training Contest 4

【杭電多校4】2020 Multi-University Training Contest 4

Blow up the Enemy

#include <bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<b;i++)
#define T ll t ;scanf("%lld",&t);while(t--)
using namespace std ;
typedef long long ll;
typedef unsigned long long ull;
const ll maxn=1e5+10;
struct node
{
    ll attack,changetime;//attach表示攻擊力,changetime表示換彈時間,killtime表示最終把爸爸殺死的時間
ll killtime; }gun[maxn]; bool cmp(node a,node b)//殺死的時間越短,則表示該武器的勝率越高 { return a.killtime<b.killtime; } int main() { T { ll n; scanf("%lld",&n); for(ll i=0;i<n;i++) { scanf("%lld%lld",&gun[i].attack,&gun[i].changetime); ll cnt
=0; cnt=100/gun[i].attack; if(100%gun[i].attack!=0) cnt++; gun[i].killtime=(cnt-1)*gun[i].changetime;//減1的原因在於你最後把揹包殺死後,並不需要再換彈 } sort(gun,gun+n,cmp);//按照殺死時間進行升序排序 double s=0; ll cnt_same=0; for(ll i=0;i<n;i++) {
if(gun[0].killtime==gun[i].killtime)//相同勝率且勝率最高的武器每次加0.5,否則加1 s+=0.5; else s+=1; } cout<<s/n<<endl; } }

Equal Sentences

(找規律)

類似斐波那契,存入所有字串,暴力搜尋一遍,如果前一個字串和當前的這個字串相同,那麼就把之前所累加的數賦值給當前這個數,存在f數組裡面;若前後兩個字串不相同,則為f[i]=(f[i-1]+f[i-2]+1)並且每次取模。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll maxn=1e5+10;
const ll mod=1e9+7;
string s[maxn];
ll f[maxn];
ll n;
#define IO ios::sync_with_stdio(false), cin.tie(0)
#define T int t ;cin >> t;while(t--)
int main()
{
    T
    {
        cin>>n;
        memset(f,0,sizeof f);
        for(ll i=1;i<=n;i++)
        {
            cin>>s[i];
        }
        for(ll i=2;i<=n;i++)
        {
            if(s[i]==s[i-1])
                f[i]=f[i-1];
            else
                f[i]=(f[i-1]+f[i-2]+1)%mod;
        }
        cout<<f[n]+1<<endl;
    }
}

Kindergarten Physics

(簽到題)

僅輸出變數d即可

這裡注意一個地方"%*d",即跳過該變數,忽略這個變數

#include<bits/stdc++.h>
using namespace std;
int mian()
{
      int a,b,d,t;
      scanf("%*d%*d%d%*d",&d );
      printf("%d\n",d);       
}