做題5min,交題2h。是從未有過的體驗!~鑒於網站全程都是炸的.....故應該全程都有1W同學在線熱血奮戰。我願稱之為 真 · 網絡選拔賽!
1001-A Cut The Wire
題目描述:
在[1,∞]的坐標軸上,問有幾組跨越 n 的,滿足以下條件的數對:
1. a > n AND a / 2 <= n
2. a * 3 + 1 > n AND a <= n
悲慘遭遇:
一開始算法O(n)級,從 ( n - 1 ) / 3 ~ n * 3 + 1 范圍內枚舉,看不到提交反饋,也不知道交沒交上,鑒於發現沒交上,代碼給隊友,大家一起交,交了好幾次,於是TEL好幾次。看到TEL之后開始着手優化,打了下表,規律明顯,12個數一周天誒!成功簽到。
#include<cstdio>
using namespace std;
long long int f[12] = {0, 2, 2, 4, 3, 5, 5, 7, 7, 9, 8, 10};
int main()
{
long long int t, n, ans;
scanf("%lld", &t);
while(t--)
{
scanf("%lld", &n);
printf("%lld\n", n / 12 * 10 + f[n % 12]);
}
return 0;
}
1006-F Power Sum
題目描述:
要求在有限區間[ 1 ,n + 2 ]內用連續平方數(1 , 4 , 9 , 16 , 25 ...)+ OR - 操作表示出給定整數 n ,並打印操作序列。
悲慘遭遇:
平方差公式,任意四個連續平方數:
a2 - (a - 1)2 - (a - 2)2 + (a - 3)2 = 4 恆成立
前四個數也可以通過構造表示出1 , 2 , 3 , 4:
| 1 | 4 | 9 | 16 |
| 1 | 3 | 4 | 2 |
| 5 | 6 | 4 | |
| 12 | 10 | ||
| ... | ... |
於是我們 %4 構造即可,后面補 1001,易知 4 個數可以表示 4,n + 2個數就一定夠表示 n.
#include <iostream>
uisng namespace std;
int main()
{
int n, k, i, num, mod, T;
scanf("%d", &T);
while(T--)
{
scanf("%d", &n);
mod = n % 4;
num = (n - 1) / 4;
k = (num * 4);
if(mod == 1)
{
k += 1;
printf("%d\n", k);
printf("1");
}
if(mod == 2)
{
k += 4;
printf("%d\n", k);
printf("0001");
}
if(mod == 3)
{
k += 2;
printf("%d\n", k);
printf("01");
}
if(mod == 0)
{
k += 4;
printf("%d\n", k);
printf("1001");
}
for(i = 0; i < num; i ++)
printf("1001");
printf("\n");
}
return 0;
}
1009 G應該是計數型動態規划吧,整理了這么久還是沒寫出來,Fw就是我了。
好了,現在就會這兩題...dalao快來傳送門!
