1. 程式人生 > >SRM 11爆0記

SRM 11爆0記

char fin 分類討論 div pla .cn iostream cor ext

難度區間:NOIP提高-

第一題

題意:

滾來滾去

技術分享

技術分享

Solution

剛開始寫了O(n)的60分模擬,打了1h的狀態表,結果寫砸了只剩35分QAQ

對於30%的數據:O(n^2)模擬

對於60%的數據:O(1)求橫向翻轉,O(n)模擬向下翻轉的情況

對於100%的數據:時間復雜度:O(1)

分類討論:

用真.骰子模擬可得:

當c%4=0時,ans=r*c/2*7;

當c%4=1時,循環節為(第1-4行):技術分享即:1,5,6,2,易得ans=c/4*14*r+循環節sum=(c>>1)*7*r+循環節sum

當c%4=2時,循環節為(第1-6行): 技術分享,同理易得ans

當c%4=3時,循環節為(第1-2行):技術分享

,同理易得ans

Code:

技術分享
 1 #include <iostream>
 2 #include <cstdio>
 3 #define ll long long 
 4 using namespace std;
 5 ll r,c,yu2[10],yu1[10];// 1:r 0:l
 6 void read(ll &k)
 7 {
 8     ll f=1;k=0;char c=getchar();
 9     while (c<0||c>9)c==-&&(f=-1),c=getchar();
10     while (c>=
0&&c<=9)k=k*10+c-0,c=getchar(); 11 k*=f; 12 } 13 int main() 14 { 15 freopen("dice.in","r",stdin); 16 freopen("dice.out","w",stdout); 17 read(r);read(c); 18 yu2[1]=5;yu2[2]=11;yu2[3]=19;yu2[4]=28;yu2[5]=36;yu2[0]=0; 19 yu1[1]=1;yu1[2]=6;yu1[3]=12;yu1[0]=0; 20 ll chu=c/4
,yu=c%4; 21 if (yu==3)printf("%lld\n",chu*14*r+11*r); 22 if (yu==2)printf("%lld\n",chu*14*r+42*((ll)r/6)+yu2[r%6]); 23 if (yu==1)printf("%lld\n",chu*14*r+14*((ll)r/4)+yu1[r%4]); 24 if (!(c%4))printf("%lld\n",r*(c>>1)*7); 25 }
View Code

SRM 11爆0記