【杭電多校4】2020 Multi-University Training Contest 4
阿新 • • 發佈:2020-08-01
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); }